Kubernetes 수신 리소스는 클러스터 외부에서 클러스터 내부의 하나 이상의 서비스로 HTTP 또는 HTTPS 라우팅을 제공합니다. Tanzu Kubernetes 클러스터는 Nginx와 같은 타사 컨트롤러를 통한 수신을 지원합니다.

이 자습서에서는 외부 트래픽을 Tanzu Kubernetes 클러스터의 서비스로 라우팅하기 위해 NGINX를 기반으로 Kubernetes 수신 서비스를 배포하는 방법을 보여줍니다. 수신 서비스에는 수신 컨트롤러가 필요합니다. NGINX 수신 컨트롤러는 Helm을 사용하여 설치합니다. Helm은 Kubernetes용 패키지 관리자입니다.

참고: 이 작업을 수행하는 방법은 여러 가지입니다. 여기에 나와있는 단계는 한 가지 접근 방법을 제공합니다. 사용 환경에 따라 다른 방법이 더 적합할 수 있습니다.

사전 요구 사항

프로시저

  1. 설명서를 참조하여 Helm을 설치합니다.
  2. Helm을 사용하여 NGINX 수신 컨트롤러를 설치합니다.
    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    helm install ingress-nginx ingress-nginx/ingress-nginx
  3. Nginx 수신 컨트롤러가 LoadBalancer 유형의 서비스로 배포되었는지 확인합니다.
    kubectl get services
    NAME                                 TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
    ingress-nginx-controller             LoadBalancer   10.16.18.20    10.19.14.76   80:30635/TCP,443:30873/TCP   59m
    ingress-nginx-controller-admission   ClusterIP      10.87.41.25    <none>        443/TCP                      59m
    
  4. 외부 IP 주소를 사용하여 로드 밸런서를 Ping합니다.
    ping 10.19.14.76
    Pinging 10.19.14.76 with 32 bytes of data:
    Reply from 10.19.14.76: bytes=32 time<1ms TTL=62
    Reply from 10.19.14.76: bytes=32 time=1ms TTL=62
    
  5. Nginx 수신 컨트롤러가 실행 중인지 확인합니다.
    kubectl get pods
    NAME                                        READY   STATUS    RESTARTS   AGE
    ingress-nginx-controller-7c6c46898c-v6blt   1/1     Running   0          76m
  6. 수신 규칙 및 경로를 사용하여 ingress-hello.yaml이라는 수신 리소스를 생성합니다.
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: ingress-hello
    spec:
      rules:
      - http:
          paths:
          - path: /hello
            backend:
              serviceName: hello
              servicePort: 80
    
  7. ingress-hello 리소스를 배포합니다.
    kubectl apply -f ingress-hello.yaml
    ingress.networking.k8s.io/ingress-hello created
  8. 수신 리소스가 배포되었는지 확인합니다.
    IP 주소는 수신 컨트롤러의 외부 IP에 매핑됩니다.
    kubectl get ingress
    NAME            CLASS    HOSTS   ADDRESS         PORTS   AGE
    ingress-hello   <none>   *       10.19.14.76     80      51m
  9. ingress-hello-test.yaml이라는 hello 테스트 애플리케이션 및 서비스를 생성합니다.
    kind: Service
    apiVersion: v1
    metadata:
      name: hello
    spec:
      selector:
        app: hello
        tier: backend
      ports:
      - protocol: TCP
        port: 80
        targetPort: http
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: hello
          tier: backend
          track: stable
      template:
        metadata:
          labels:
            app: hello
            tier: backend
            track: stable
        spec:
          containers:
            - name: hello
              image: "gcr.io/google-samples/hello-go-gke:1.0"
              ports:
                - name: http
                  containerPort: 80
    
  10. ingress-hello-test 리소스를 배포합니다.
    kubectl apply -f ingress-hello-test.yaml
    service/hello created
    deployment.apps/hello created
  11. hello 배포를 사용할 수 있는지 확인합니다.
    kubectl get deployments
    NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
    hello                      3/3     3            3           4m59s
    ingress-nginx-controller   1/1     1            1           3h39m
    
  12. Nginx 수신 컨트롤러에서 사용하는 로드 밸런서의 공용 IP 주소를 가져옵니다.
    kubectl get ingress
    NAME            CLASS    HOSTS   ADDRESS         PORTS   AGE
    ingress-hello   <none>   *       10.19.14.76     80      13m
  13. 브라우저를 사용하여 공용 IP로 이동하고 수신 경로를 포함합니다.
    http://10.19.14.76/hello
    "hello" 메시지가 반환됩니다.
    {"message":"Hello"}

결과

클러스터 내에서 실행되는 서비스가 앞에 있는 백엔드 앱은 로드 밸런서의 외부 IP 주소를 사용하여 수신 컨트롤러를 통해 외부에서 브라우저로 액세스합니다.