이 항목에서는 Contour 수신용 TKG 확장 v1.3.1을 배포하는 방법을 설명합니다. Contour는 엔보이 역방향 프록시를 사용하는 Kubernetes 수신 컨트롤러입니다. Contour 수신용 TKG 확장을 배포하여 Tanzu Kubernetes 클러스터에서 실행되는 서비스에 대한 수신 경로를 노출합니다.

확장 사전 요구 사항

Contour 수신용 TKG 확장 v1.3.1을 배포하기 전에 다음 요구 사항을 준수합니다.

Contour 확장 배포

Contour 수신용 TKG 확장은 클러스터에 엔보이 및 Contour라는 두 가지 컨테이너를 설치합니다. 자세한 내용은 https://projectcontour.io/의 내용을 참조하십시오.
컨테이너 리소스 유형 복제 설명
엔보이 DaemonSet 3 고성능 역방향 프록시
Contour 배포 2 엔보이용 관리 및 구성 서버
확장은 VMware 공용 레지스트리( https://projects.registry.vmware.com/)에서 컨테이너를 가져오도록 구성됩니다. 개인 레지스트리를 사용하는 경우 데이터 값 및 확장 구성에서 끝점 URL이 일치하도록 변경합니다. Contour 확장 구성의 내용을 참조하십시오.
  1. 각각의 확장 사전 요구 사항을 완료했는지 확인합니다. 확장 사전 요구 사항의 내용을 참조하십시오.
  2. 디렉토리를 Contour 확장 파일을 다운로드한 위치로 변경합니다.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/ingress/contour
  3. 다음 명령을 실행하여 tanzu-system-ingress 네임스페이스와 Contour 서비스 계정 및 역할 개체를 생성합니다.
    kubectl apply -f namespace-role.yaml
  4. vSphere에 대한 Contour 데이터 값 파일을 생성합니다.
    cp vsphere/contour-data-values-lb.yaml.example vsphere/contour-data-values.yaml
  5. 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을 지정하는 것이 좋습니다. 자세한 내용은 릴리스 정보를 참조하십시오.
  6. 데이터 값으로 암호를 생성합니다.
    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
  7. Contour 수신 컨트롤러 애플리케이션을 배포합니다.
    kubectl apply -f contour-extension.yaml

    성공하면 app.kappctrl.k14s.io/contour created가 표시됩니다.

  8. Contour 수신 컨트롤러 애플리케이션의 상태를 확인합니다.
    kubectl get app contour -n tanzu-system-ingress
    성공하면 상태가 Reconciling에서 Reconcile succeeded로 변경됩니다. 상태가 Reconcile failed인 경우 Contour 수신 배포 문제 해결 항목을 참조하십시오.
  9. Contour 수신 컨트롤러 애플리케이션에 대한 자세한 정보를 확인합니다.
    kubectl get app contour -n tanzu-system-ingress -o yaml
  10. 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
  11. 엔보이 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
  12. Contour 배포를 확인합니다.
    kubectl get deployments -n tanzu-system-ingress
    성공하면 2-포드 Contour 배포가 표시됩니다.
    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    contour   2/2     2            2           8m7s
  13. 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를 실행하여 포드 상태를 확인합니다. contourenvoy 포드는 Running이어야 합니다. 포드 상태가 ImagePullBackOff 또는 ImageCrashLoopBackOff이면 컨테이너 이미지를 끌어올 수 없습니다. 데이터 값 및 확장 YAML 파일에서 레지스트리 URL을 확인하고 정확한지 확인합니다.

컨테이너 로그를 확인합니다. 여기서 name-XXXXkubectl 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 확장을 업데이트합니다.

  1. 암호에서 Contour 데이터 값을 얻습니다.
    kubectl get secret contour-data-values -n tanzu-system-ingress -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > contour-data-values.yaml
    
  2. 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을 지정하는 것이 좋습니다. 자세한 내용은 릴리스 정보를 참조하십시오.
  3. 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.yamlsyncPeriod를 더 작은 값으로 변경하고 kubectl apply -f contour-extension.yaml을 사용하여 확장을 다시 배포합니다.
  4. 애플리케이션의 상태를 확인합니다.
    kubectl get app contour -n tanzu-system-ingress

    Contour가 업데이트되면 상태가 Reconcile Succeeded로 변경됩니다.

  5. 자세한 상태를 봅니다.
    kubectl get app contour -n tanzu-system-ingress -o yaml
  6. 필요한 경우 문제를 해결합니다. Contour 수신 배포 문제 해결의 내용을 참조하십시오.

Contour 확장 삭제

Tanzu Kubernetes 클러스터에서 Contour 확장을 삭제합니다.

참고: 순서대로 단계를 완료하십시오. Contour 수신 컨트롤러 애플리케이션이 완전히 삭제되기 전에 네임스페이스, 서비스 계정 및 역할 개체를 삭제하지 마십시오. 그러면 시스템 오류가 발생할 수 있습니다.
  1. 디렉토리를 Contour 확장으로 변경합니다.
    cd extensions/ingress/contour/
  2. Contour 수신 컨트롤러 애플리케이션을 삭제합니다.
    kubectl delete app contour -n tanzu-system-ingress

    예상 결과: app.kappctrl.k14s.io "contour" deleted.

  3. Contour 수신 컨트롤러 애플리케이션이 삭제되었는지 확인합니다.
    kubectl get app contour -n tanzu-system-ingress

    예상 결과: apps.kappctrl.k14s.io "contour" not found.

  4. tanzu-system-ingress 네임스페이스와 Contour 확장 서비스 계정 및 역할 개체를 삭제합니다.
    kubectl delete -f namespace-role.yaml

Contour 확장 업그레이드

기존 Contour 확장이 배포된 경우 최신 버전으로 업그레이드할 수 있습니다.
  1. Contour configmap을 내보내서 백업으로 저장합니다.
    kubectl get configmap contour -n tanzu-system-ingress -o 'go-template={{ index .data "contour.yaml" }}' > contour-configmap.yaml
  2. 기존 Contour 배포를 삭제합니다. Contour 확장 삭제의 내용을 참조하십시오.
  3. 최신 Contour 확장을 배포합니다. Contour 확장 배포의 내용을 참조하십시오.

Contour 확장 구성

Contour 수신 컨트롤러 구성 값은 /extensions/ingress/contour/vsphere/contour-data-values.yaml에 설정됩니다.
표 1. Contour 수신 구성 매개 변수
매개 변수 설명 유형 기본값
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 엔보이 이미지 태그. 엔보이 버전을 업그레이드하는 경우 이 값을 업데이트해야 할 수 있습니다. 문자열

v1.17.3_vmware.1

참고: CVE로 인해 엔보이 이미지 v1.16.2_vmware.1을 사용하지 마십시오. 자세한 내용은 릴리스 정보를 참조하십시오.
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으로 설정합니다.