Kubernetes 수신 리소스는 클러스터 외부에서 클러스터 내부의 하나 이상의 서비스로 HTTP 또는 HTTPS 라우팅을 제공합니다. TKG 클러스터는 Contour와 같은 타사 컨트롤러를 통한 수신을 지원합니다.
이 자습서에서는 외부 트래픽을 TKG 클러스터의 서비스로 라우팅하기 위해 Contour 수신 컨트롤러를 배포하는 방법을 보여줍니다. Contour는 VMware에서 기여하는 오픈 소스 프로젝트입니다.
사전 요구 사항
프로시저
- 서비스 계정을 통해 클러스터의 모든 리소스를 관리할 수 있도록 ClusterRoleBinding을 생성합니다.
kubectl create clusterrolebinding default-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated
참고: 보안을 강화해야 하는 경우에는projectcontour
네임스페이스에 RoleBinding을 사용합니다. TKG 서비스 클러스터에 기본 포드 보안 정책 적용의 내용을 참조하십시오. -
projectcontour
라는 네임스페이스를 생성합니다.이것은 Contour 수신 컨트롤러 배포의 기본 네임스페이스입니다.kubectl create ns projectcontour
- Contour 수신 컨트롤러 YAML Contour 수신 배포를 다운로드합니다.
- 텍스트 편집기를 사용하여 contour.yaml 파일을 엽니다.
- 다음 두 줄을 주석 처리합니다. 각 줄 앞에
#
기호를 추가하면 됩니다.줄 1632:# service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
줄 1634:# externalTrafficPolicy: Local
-
contour.yaml
파일을 적용하여 Contour를 배포합니다.kubectl apply -f contour.yaml
- Contour 수신 컨트롤러 및 엔보이 로드 밸런서 서비스가 배포되었는지 확인합니다.
kubectl get services -n projectcontour
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE contour ClusterIP 198.63.146.166 <none> 8001/TCP 120m envoy LoadBalancer 198.48.52.47 192.168.123.5 80:30501/TCP,443:30173/TCP 120m
- Contour 및 엔보이 포드가 실행 중인지 확인합니다.
kubectl get pods -n projectcontour
NAME READY STATUS RESTARTS AGE contour-7966d6cdbf-skqfl 1/1 Running 1 21h contour-7966d6cdbf-vc8c7 1/1 Running 1 21h contour-certgen-77m2n 0/1 Completed 0 21h envoy-fsltp 1/1 Running 0 20h
- 외부 IP 주소를 사용하여 로드 밸런서를 Ping합니다.
ping 192.168.123.5
PING 192.168.123.5 (192.168.123.5) 56(84) bytes of data. 64 bytes from 192.168.123.5: icmp_seq=1 ttl=62 time=3.50 ms
- ingress-nihao.yaml이라는 수신 리소스를 생성합니다.
YAML을 생성합니다.
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ingress-nihao spec: rules: - http: paths: - path: /nihao backend: serviceName: nihao servicePort: 80
YAML을 적용합니다.kubectl apply -f ingress-nihao.yaml
수신 리소스가 생성되었는지 확인합니다.kubectl get ingress
엔보이 로드 밸런서의 외부 IP 주소(이 예에서는192.168.123.5
)는 수신 개체에서 사용됩니다.NAME CLASS HOSTS ADDRESS PORTS AGE ingress-nihao <none> * 192.168.123.5 80 17s
- 백엔드 애플리케이션으로 테스트 서비스를 배포합니다.
ingress-nihao-test.yaml이라는 다음 YAML 파일을 만듭니다.
kind: Service apiVersion: v1 metadata: name: nihao spec: selector: app: nihao tier: backend ports: - protocol: TCP port: 80 targetPort: http --- apiVersion: apps/v1 kind: Deployment metadata: name: nihao spec: replicas: 3 selector: matchLabels: app: nihao tier: backend track: stable template: metadata: labels: app: nihao tier: backend track: stable spec: containers: - name: nihao image: "gcr.io/google-samples/hello-go-gke:1.0" ports: - name: http containerPort: 80
YAML을 적용합니다.kubectl apply -f ingress-nihao-test.yaml
nihao
서비스가 생성되었는지 확인합니다.kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nihao ClusterIP 10.14.21.22 <none> 80/TCP 15s
백엔드 배포가 생성되었는지 확인합니다.kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE nihao 3/3 3 3 2m25s
백엔드 포드가 존재하는지 확인합니다.kubectl get pods
NAME READY STATUS RESTARTS AGE nihao-8646584495-9nm8x 1/1 Running 0 106s nihao-8646584495-vscm5 1/1 Running 0 106s nihao-8646584495-zcsdq 1/1 Running 0 106s
- Contour 수신 컨트롤러에서 사용하는 로드 밸런서의 공용 IP 주소를 가져옵니다.
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE ingress-nihao <none> * 10.19.14.76 80 13m
- 브라우저를 사용하여 공용 IP로 이동하고 수신 경로를 포함합니다.
http://10.19.14.76/nihao
"hello" 메시지가 반환됩니다.{"message":"Hello"}