이 항목에서는 Contour 수신용 TKG 확장 v1.3.1을 배포하는 방법을 설명합니다. Contour는 엔보이 역방향 프록시를 사용하는 Kubernetes 수신 컨트롤러입니다. Contour 수신용 TKG 확장을 배포하여 Tanzu Kubernetes 클러스터에서 실행되는 서비스에 대한 수신 경로를 노출합니다.
확장 사전 요구 사항
- 클러스터를 프로비저닝합니다. TKGS v1alpha2 API를 사용하여 Tanzu Kubernetes 클러스터를 프로비저닝하는 워크플로의 내용을 참조하십시오.
- 클러스터에 연결합니다. vCenter Single Sign-On 사용자로 Tanzu Kubernetes 클러스터에 연결의 내용을 참조하십시오.
- kubectl을 실행하는 클라이언트 호스트에 TKG 확장 v1.3.1 번들 다운로드합니다.
- 대상 클러스터에 TKG 확장 사전 요구 사항 설치합니다.
Contour 확장 배포
컨테이너 | 리소스 유형 | 복제 | 설명 |
---|---|---|---|
엔보이 | DaemonSet | 3 | 고성능 역방향 프록시 |
Contour | 배포 | 2 | 엔보이용 관리 및 구성 서버 |
- 각각의 확장 사전 요구 사항을 완료했는지 확인합니다. 확장 사전 요구 사항의 내용을 참조하십시오.
- 디렉토리를 Contour 확장 파일을 다운로드한 위치로 변경합니다.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/ingress/contour
- 다음 명령을 실행하여
tanzu-system-ingress
네임스페이스와 Contour 서비스 계정 및 역할 개체를 생성합니다.kubectl apply -f namespace-role.yaml
- vSphere에 대한 Contour 데이터 값 파일을 생성합니다.
cp vsphere/contour-data-values-lb.yaml.example vsphere/contour-data-values.yaml
vsphere/contour-data-values.yaml
파일을 업데이트하여 Contour를 구성합니다.예제 데이터 값 파일은 필요한 최소 구성을 제공합니다. Contour 확장 구성에서 모든 구성 필드 및 옵션에 대한 설명을 참조하십시오.
예를 들어 다음 vSphere용 Contour 구성은 LoadBalancer 유형의 서비스를 사용합니다.infrastructure_provider: "vsphere" contour: image: repository: projects.registry.vmware.com/tkg envoy: image: repository: projects.registry.vmware.com/tkg tag: v1.17.3_vmware.1 service: type: "LoadBalancer"
참고: CVE가 있는 엔보이 이미지 버전v1.16.2_vmware.1
을 사용하지 않도록 엔보이 이미지 버전v1.17.3_vmware.1
을 지정하는 것이 좋습니다. 자세한 내용은 릴리스 정보를 참조하십시오.- 데이터 값으로 암호를 생성합니다.
kubectl create secret generic contour-data-values --from-file=values.yaml=vsphere/contour-data-values.yaml -n tanzu-system-ingress
tanzu-system-ingress
네임스페이스에secret/contour-data-values
가 생성됩니다. 다음 명령을 사용하여 확인합니다.kubectl get secrets -n tanzu-system-ingress
- Contour 수신 컨트롤러 애플리케이션을 배포합니다.
kubectl apply -f contour-extension.yaml
성공하면
app.kappctrl.k14s.io/contour created
가 표시됩니다. - Contour 수신 컨트롤러 애플리케이션의 상태를 확인합니다.
kubectl get app contour -n tanzu-system-ingress
성공하면 상태가Reconciling
에서Reconcile succeeded
로 변경됩니다. 상태가Reconcile failed
인 경우 Contour 수신 배포 문제 해결 항목을 참조하십시오. - Contour 수신 컨트롤러 애플리케이션에 대한 자세한 정보를 확인합니다.
kubectl get app contour -n tanzu-system-ingress -o yaml
- LoadBalancer 유형의 엔보이 서비스를 봅니다.
kubectl get service envoy -n tanzu-system-ingress -o wide
성공하면 엔보이 LoadBalancer 세부 정보가 표시됩니다.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR envoy LoadBalancer 10.79.65.110 10.178.147.73 80:30437/TCP,443:30589/TCP 2m42s app=envoy,kapp.k14s.io/app=1629916985840017976
- 엔보이 DaemonSet을 확인합니다.
kubectl get daemonsets -n tanzu-system-ingress
성공하면 3-포드 엔보이 DaemonSet이 표시됩니다.NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE envoy 3 3 3 3 3 <none> 6m10s
- Contour 배포를 확인합니다.
kubectl get deployments -n tanzu-system-ingress
성공하면 2-포드 Contour 배포가 표시됩니다.NAME READY UP-TO-DATE AVAILABLE AGE contour 2/2 2 2 8m7s
- Contour 수신 컨트롤러가 올바르게 설치되어 있고 사용할 준비가 되었는지 확인합니다.
kubectl get pod,svc -n tanzu-system-ingress
Contour 및 엔보이 포드의 상태는Running
이어야 하며 엔보이 서비스의 LoadBalancer에는EXTERNAL-IP
가 할당됩니다.NAME READY STATUS RESTARTS AGE pod/contour-84bb5475cf-7h4cx 1/1 Running 0 9m52s pod/contour-84bb5475cf-v8k9r 1/1 Running 0 9m52s pod/envoy-4828j 2/2 Running 0 9m52s pod/envoy-c54dw 2/2 Running 0 9m52s pod/envoy-qpjqp 2/2 Running 0 9m52s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/contour ClusterIP 10.105.6.207 <none> 8001/TCP 9m52s service/envoy LoadBalancer 10.79.65.110 10.178.147.73 80:30437/TCP,443:30589/TCP 9m52s
Contour 수신 배포 문제 해결
배포 또는 조정이 실패하면 kubectl get pods -n tanzu-system-ingress
를 실행하여 포드 상태를 확인합니다. contour
및 envoy
포드는 Running
이어야 합니다. 포드 상태가 ImagePullBackOff
또는 ImageCrashLoopBackOff
이면 컨테이너 이미지를 끌어올 수 없습니다. 데이터 값 및 확장 YAML 파일에서 레지스트리 URL을 확인하고 정확한지 확인합니다.
name-XXXX
는
kubectl get pods -A
를 실행할 때 고유한 포드 이름입니다.
kubectl logs pod/envoy-XXXXX -c envoy -n tanzu-system-ingress
kubectl logs pod/contour-XXXXX -c contour -n tanzu-system-ingress
Contour 포드가 위의 이미지 오류 중 하나가 표시되면서 실패하지 않고 진행되지 않으면서("contour-xxxxx 진행 중 시간이 초과됨") ContainerCreating
상태에서 멈춰 있으면 IP 주소 충돌이 있을 수 있습니다. 워크로드 네트워크를 구성할 때 지정한 노드 CIDR 범위가 클러스터 규격의 포드 CIDR 범위(기본적으로 192.168.0.0/16
)와 충돌하지 않는지 확인합니다. 충돌이 있는 경우 클러스터를 다른 포드 서브넷으로 업데이트하거나 노드 네트워크를 변경합니다.
Contour 확장 업데이트
Tanzu Kubernetes 클러스터에 배포된 Contour 확장을 업데이트합니다.
- 암호에서 Contour 데이터 값을 얻습니다.
kubectl get secret contour-data-values -n tanzu-system-ingress -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > contour-data-values.yaml
ingress/contour/values.yaml
에서 Contour 수신 데이터 값을 업데이트합니다. Contour 확장 구성의 내용을 참조하십시오.예를 들어 다음 vSphere용 Contour 구성은 LoadBalancer 유형의 서비스를 사용합니다.infrastructure_provider: "vsphere" contour: image: repository: projects.registry.vmware.com/tkg envoy: image: repository: projects.registry.vmware.com/tkg tag: v1.17.3_vmware.1 service: type: "LoadBalancer"
참고: CVE가 있는 엔보이 이미지 버전v1.16.2_vmware.1
을 사용하지 않도록 엔보이 이미지 버전v1.17.3_vmware.1
을 지정하는 것이 좋습니다. 자세한 내용은 릴리스 정보를 참조하십시오.- Contour 데이터 값 암호를 업데이트합니다.
kubectl create secret generic contour-data-values --from-file=values.yaml=contour-data-values.yaml -n tanzu-system-ingress -o yaml --dry-run | kubectl replace -f-
Contour 확장이 새 데이터 값으로 조정됩니다.참고: 기본적으로 kapp-controller는 5분마다 애플리케이션을 동기화합니다. 업데이트는 5분 이내에 적용됩니다. 즉시 적용하려면contour-extension.yaml
의syncPeriod
를 더 작은 값으로 변경하고kubectl apply -f contour-extension.yaml
을 사용하여 확장을 다시 배포합니다. - 애플리케이션의 상태를 확인합니다.
kubectl get app contour -n tanzu-system-ingress
Contour가 업데이트되면 상태가
Reconcile Succeeded
로 변경됩니다. - 자세한 상태를 봅니다.
kubectl get app contour -n tanzu-system-ingress -o yaml
- 필요한 경우 문제를 해결합니다. Contour 수신 배포 문제 해결의 내용을 참조하십시오.
Contour 확장 삭제
Tanzu Kubernetes 클러스터에서 Contour 확장을 삭제합니다.
- 디렉토리를 Contour 확장으로 변경합니다.
cd extensions/ingress/contour/
- Contour 수신 컨트롤러 애플리케이션을 삭제합니다.
kubectl delete app contour -n tanzu-system-ingress
예상 결과:
app.kappctrl.k14s.io "contour" deleted
. - Contour 수신 컨트롤러 애플리케이션이 삭제되었는지 확인합니다.
kubectl get app contour -n tanzu-system-ingress
예상 결과:
apps.kappctrl.k14s.io "contour" not found
. tanzu-system-ingress
네임스페이스와 Contour 확장 서비스 계정 및 역할 개체를 삭제합니다.kubectl delete -f namespace-role.yaml
Contour 확장 업그레이드
- Contour configmap을 내보내서 백업으로 저장합니다.
kubectl get configmap contour -n tanzu-system-ingress -o 'go-template={{ index .data "contour.yaml" }}' > contour-configmap.yaml
- 기존 Contour 배포를 삭제합니다. Contour 확장 삭제의 내용을 참조하십시오.
- 최신 Contour 확장을 배포합니다. Contour 확장 배포의 내용을 참조하십시오.
Contour 확장 구성
/extensions/ingress/contour/vsphere/contour-data-values.yaml
에 설정됩니다.
매개 변수 | 설명 | 유형 | 기본값 |
---|---|---|---|
infrastructure_provider | 인프라 제공자. 지원되는 값: vsphere, aws, azure | 문자열 | 필수 매개 변수 |
contour.namespace | Contour가 배포될 네임스페이스 | 문자열 | tanzu-system-ingress |
contour.config.requestTimeout | 엔보이에 전달할 클라이언트 요청 시간 초과 | time.Duration | 0s 파일 다운로드에 대한 경로 시간 초과의 내용을 참조하십시오. |
contour.config.server.xdsServerType | 사용할 XDS 서버 유형: 지원되는 값: contour 또는 envoy | 문자열 | Null |
contour.config.tls.minimumProtocolVersion | Contour가 협상할 최소 TLS 버전 | 문자열 | 1.1 |
contour.config.tls.fallbackCertificate.name | vhost에 대해 정의된 SNI와 일치하지 않는 요청에 대한 폴백 인증서가 포함된 암호의 이름 | 문자열 | Null |
contour.config.tls.fallbackCertificate.namespace | 폴백 인증서가 포함된 암호의 네임스페이스 | 문자열 | Null |
contour.config.tls.envoyClientCertificate.name | 클라이언트 인증서로 사용할 암호의 이름, 백엔드 서비스에 대한 TLS 연결용 개인 키 | 문자열 | Null |
contour.config.tls.envoyClientCertificate.namespace | 클라이언트 인증서로 사용할 암호의 네임스페이스, 백엔드 서비스에 대한 TLS 연결용 개인 키 | 문자열 | Null |
contour.config.leaderelection.configmapName | contour leaderelection에 사용할 configmap의 이름 | 문자열 | leader-elect |
contour.config.leaderelection.configmapNamespace | contour leaderelection configmap의 네임스페이스 | 문자열 | tanzu-system-ingress |
contour.config.disablePermitInsecure | ingressroute permitInsecure 필드를 사용하지 않도록 설정 | 부울 | false |
contour.config.accesslogFormat | 액세스 로그 형식 | 문자열 | envoy |
contour.config.jsonFields | 로깅될 필드 | 문자열 어레이 | https://godoc.org/github.com/projectcontour/contour/internal/envoy#JSONFields |
contour.config.useProxyProtocol | https://projectcontour.io/guides/proxy-proto/ | 부울 | false |
contour.config.defaultHTTPVersions | Contour가 제공할 엔보이를 프로그래밍해야 하는 HTTP 버전 | 문자열 어레이 | "HTTP/1.1 HTTP2" |
contour.config.timeouts.requestTimeout | 전체 요청에 대한 시간 제한 | time.Duration | Null(시간 제한을 사용하지 않도록 설정함) |
contour.config.timeouts.connectionIdleTimeout | 유휴 연결을 종료하기 전에 대기할 시간 | time.Duration | 60s |
contour.config.timeouts.streamIdleTimeout | 활동이 없는 요청 또는 스트림을 종료하기 전에 대기할 시간 | time.Duration | 5m |
contour.config.timeouts.maxConnectionDuration | 활동 여부에 관계없이 연결을 종료하기 전에 대기할 시간 | time.Duration | Null(시간 제한을 사용하지 않도록 설정함) |
contour.config.timeouts.ConnectionShutdownGracePeriod | 초기 및 최종 GOAWAY 전송 사이의 대기 시간 | time.Duration | 5s |
contour.config.cluster.dnsLookupFamily | HTTPProxy 경로에서 externalName 유형 서비스에 대한 업스트림 요청에 사용할 dns-lookup-family | 문자열 | Null(지원되는 값: auto, v4, v6) |
contour.config.debug | Contour 디버깅 켜기 | 부울 | false |
contour.config.ingressStatusAddress | 모든 수신 리소스의 상태에 설정할 주소 | 문자열 | Null |
contour.certificate.duration | Contour 인증서 기간 | time.Duration | 8760h |
contour.certificate.renewBefore | Contour 인증서를 갱신하기 전까지의 기간 | time.Duration | 360h |
contour.deployment.replicas | Contour 복제본 수 | 정수 | 2 |
contour.image.repository | Contour 이미지가 있는 저장소의 위치입니다. 기본값은 공용 VMware 레지스트리입니다. 비공개 저장소(예: 에어갭 환경)를 사용하는 경우 이 값을 변경합니다. | 문자열 | projects.registry.vmware.com/tkg |
contour.image.name | Contour 이미지의 이름 | 문자열 | contour |
contour.image.tag | Contour 이미지 태그. Contour 버전을 업그레이드하는 경우 이 값을 업데이트해야 할 수 있습니다. | 문자열 | v1.11.0_vmware.1 |
contour.image.pullPolicy | Contour 이미지 Pull 정책 | 문자열 | IfNotPresent |
envoy.image.repository | 엔보이 이미지가 있는 저장소의 위치입니다. 기본값은 공용 VMware 레지스트리입니다. 비공개 저장소(예: 에어갭 환경)를 사용하는 경우 이 값을 변경합니다. | 문자열 | projects.registry.vmware.com/tkg |
envoy.image.name | 엔보이 이미지의 이름 | 문자열 | envoy |
envoy.image.tag | 엔보이 이미지 태그. 엔보이 버전을 업그레이드하는 경우 이 값을 업데이트해야 할 수 있습니다. | 문자열 |
|
envoy.image.pullPolicy | 엔보이 이미지 Pull 정책 | 문자열 | IfNotPresent |
envoy.hostPort.enable | 호스트에서 엔보이 포트를 노출하는 플래그 | 부울 | true |
envoy.hostPort.http | 엔보이 HTTP 호스트 포트 | 정수 | 80 |
envoy.hostPort.https | 엔보이 HTTPS 호스트 포트 | 정수 | 443 |
envoy.service.type | 엔보이를 노출할 서비스 유형. 지원되는 값: ClusterIP, NodePort, LoadBalancer | 문자열 | vSphere에 대한 필수 매개 변수: NodePort 또는 LoadBalancer, AWS: LoadBalancer, Azure: LoadBalancer |
envoy.service.annotations | 엔보이 서비스 주석 | 맵(키-값) | 빈 맵 |
envoy.service.externalTrafficPolicy | 엔보이 서비스의 외부 트래픽 정책. 지원되는 값: Local, Cluster | 문자열 | 클러스터 |
envoy.service.nodePort.http | http 요청에 사용되는 NodePort 유형의 서비스에 필요한 nodePort | 정수 | Null - Kubernetes가 동적 노드 포트를 할당함 |
envoy.service.nodePort.https | HTTPS 요청에 사용되는 NodePort 유형의 서비스에 필요한 nodePort | 정수 | Null - Kubernetes가 동적 노드 포트를 할당함 |
envoy.deployment.hostNetwork | hostNetwork에서 엔보이 실행 | 부울 | false |
envoy.service.aws.LBType | 엔보이 서비스를 노출하는 데 사용할 AWS LB 유형. 지원되는 값: classic, nlb | 문자열 | classic |
envoy.loglevel | 엔보이에 사용할 로그 수준 | 문자열 | 정보 |
파일 다운로드에 대한 경로 시간 초과
contour.config.requestTimeout
매개 변수는Contour 경로 시간 초과 기간을 정의합니다. 기본값은 0s
입니다. 파일 전송에 Contour를 사용하는 경우 이 값을 조정해야 할 수 있습니다.
Contour 설명서에 따르면 시간 초과 값이 0s
이면 Contour가 엔보이 시간 초과를 사용하도록 지시합니다. 엔보이 설명서에 따르면 엔보이의 기본 시간 초과 값은 15초입니다. 또한 엔보이는 전체 요청-응답 작업이 시간 초과 간격 내에 완료될 것으로 예상합니다.
따라서 기본 Contour 시간 초과 설정이 0s
인 경우 파일 전송이 15초 내에 완료되어야 합니다. 대용량 파일 전송에는 이 시간이 충분하지 않을 수 있습니다. 기본 엔보이 시간 초과를 사용하지 않도록 설정하려면 contour.config.requestTimeout
값을 0
으로 설정합니다.