수신 제어용 Contour 설치

이 항목에서는 Contour를 Tanzu Kubernetes Grid의 워크로드에 배포하는 방법을 설명합니다.

ContourEnvoy 에지 및 서비스 프록시를 사용하는 Kubernetes 수신 컨트롤러입니다. Tanzu Kubernetes Grid에는 Contour 및 Envoy용 서명된 바이너리를 포함하며, 이러한 바이너리를 워크로드 클러스터에 배포하여 해당 클러스터에서 수신 제어 서비스를 제공할 수 있습니다.

Contour 및 Envoy를 워크로드 클러스터에 직접 배포합니다. Prometheus, Grafana, Harbor 패키지를 배포하려면 Contour를 배포해야 합니다.

수신 제어에 대한 일반적인 내용은 Kubernetes 설명서의 수신 컨트롤러를 참조하십시오.

사전 요구 사항

중요

이 Tanzu Kubernetes Grid 릴리스에서 제공된 Contour 및 Envoy 구현에서는 자체 서명된 인증서를 사용 중인 것으로 가정합니다.

Contour 배포를 위해 워크로드 클러스터 준비

클러스터를 준비하려면 다음을 수행합니다.

  1. Contour를 배포할 워크로드 클러스터의 admin 자격 증명을 가져옵니다. 예:

    tanzu cluster kubeconfig get my-cluster --admin
    

    위 예에서 my-cluster는 클러스터의 이름입니다.

  2. kubectl의 컨텍스트를 클러스터로 설정합니다. 예:

    kubectl config use-context my-cluster-admin@my-cluster
    
  3. 클러스터에 아직 standard 패키지 저장소가 설치되어 있지 않은 경우 설치합니다.

    참고

    계획 기반 클러스터(레거시)를 대상으로 하는 경우 이 단계를 건너뜁니다. 계획 기반 클러스터의 경우 tanzu-standard 패키지 저장소가 모든 클러스터의 tanzu-package-repo-global 네임스페이스에서 자동으로 사용되도록 설정되었습니다.

    tanzu package repository add tanzu-standard --url PACKAGE-REPOSITORY-ENDPOINT --namespace tkg-system
    

    여기서 PACKAGE-REPOSITORY-ENDPOINTstandard 패키지 저장소의 URL입니다. 이 릴리스의 경우 URL은 projects.registry.vmware.com/tkg/packages/standard/repo:v2.1.1입니다.

    Tanzu CLI에서 이 값을 가져오려면 패키지 저장소 나열을 참조하거나 Tanzu Mission Control의 클러스터(Cluster) 창에서 추가 기능(Addons) > 저장소(Repositories) 목록을 참조하십시오.

  4. 아직 설치하지 않은 경우 클러스터에 cert-manager를 설치합니다. 지침은 인증 관리를 위한 cert-manager 설치를 참조하십시오.

  5. 아래의 워크로드 클러스터에 Contour 배포로 진행합니다.

워크로드 클러스터에 Contour 배포

클러스터를 설정한 후에는 먼저 Contour 패키지를 설치한 다음, 패키지를 설치할 때 사용되는 구성 파일을 생성해야 합니다.

  1. 패키지의 기본 구성을 검색하여 Contour 패키지용 구성 파일을 생성합니다.

    tanzu package available get contour.tanzu.vmware.com/PACKAGE-VERSION --default-values-file-output FILE-PATH
    

    여기서 PACKAGE-VERSION은 설치하려는 Contour 패키지의 버전이며 FILE-PATH는 구성 파일을 저장할 위치입니다(예: contour-data-values.yaml).

  2. contour-data-values.yaml 파일에서 다음을 구성합니다:

    vSphere
    이 파일은 vSphere에서 Contour 패키지를 구성합니다.
    ---
    infrastructure_provider: vsphere
    namespace: tanzu-system-ingress
    contour:
     configFileContents: {}
     useProxyProtocol: false
     replicas: 2
     pspNames: "vmware-system-restricted"
     logLevel: info
    envoy:
     service:
       type: NodePort
       annotations: {}
       nodePorts:
         http: null
         https: null
       externalTrafficPolicy: Cluster
       disableWait: false
     hostPorts:
       enable: true
       http: 80
       https: 443
     hostNetwork: false
     terminationGracePeriodSeconds: 300
     logLevel: info
     pspNames: null
    certificates:
     duration: 8760h
     renewBefore: 360h
    
    AWS
    이 파일은 vSphere에서 Contour 패키지를 구성합니다.
    ---
    infrastructure_provider: aws
    namespace: tanzu-system-ingress
    contour:
     configFileContents: {}
     useProxyProtocol: false
     replicas: 2
     pspNames: "vmware-system-restricted"
     logLevel: info
    envoy:
     service:
       type: LoadBalancer
       annotations: {}
       nodePorts:
         http: null
         https: null
       externalTrafficPolicy: Cluster
       aws:
         LBType: classic
       disableWait: false
     hostPorts:
       enable: true
       http: 80
       https: 443
     hostNetwork: false
     terminationGracePeriodSeconds: 300
     logLevel: info
     pspNames: null
    certificates:
     duration: 8760h
     renewBefore: 360h
    
    Azure
    이 파일은 Azure에서 Contour 패키지를 구성합니다.
    ---
    infrastructure_provider: azure
    namespace: tanzu-system-ingress
    contour:
     configFileContents: {}
     useProxyProtocol: false
     replicas: 2
     pspNames: "vmware-system-restricted"
     logLevel: info
    envoy:
     service:
       type: LoadBalancer
       annotations: {}
       nodePorts:
         http: null
         https: null
       externalTrafficPolicy: Cluster
       disableWait: false
     hostPorts:
       enable: true
       http: 80
       https: 443
     hostNetwork: false
     terminationGracePeriodSeconds: 300
     logLevel: info
     pspNames: null
    certificates:
     duration: 8760h
     renewBefore: 360h
    
  3. vSphere with Tanzu Supervisor를 사용하여 생성된 워크로드 클러스터에 Contour를 설치하는 경우 다음 중 하나를 수행합니다.

    • hostPorts 사용 안 함:

      Envoy 데몬세트에 hostPorts가 필요하지 않은 경우 contour-data-values.yaml을 편집하여 envoy.hostPorts.enablefalse로 설정합니다.

      contour-data-values.yaml
      envoy:
        hostPorts:
          enable: false
      
    • hostPorts 사용 안 함:

      hostPorts가 필요한 경우 Envoy 서비스 계정에 tkg-system-privileged PSP에 대한 액세스 권한을 부여하는 ClusterRoleBinding을 생성합니다.

      kubectl create clusterrolebinding envoy-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --serviceaccount=tanzu-system-ingress:envoy
      
  4. NSX ALB를 로드 밸런서 서비스 제공자로 사용하는 vSphere 클러스터에 Contour를 설치하는 경우 contour-default-values.yaml 파일을 수정하여 envoy.service.typeLoadBalancer로 설정합니다.

    [...]
    envoy:
     service:
       type: LoadBalancer
    
  5. 인터넷 제한 AWS 환경에 Contour를 설치하는 경우 contour-data-values.yaml 파일을 수정하여 Envoy 서비스에 다음 주석을 추가합니다.

    infrastructure_provider: aws
    [...]
    envoy:
     service:
       annotations:
         service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    
  6. (선택 사항) 필요한 경우 contour-data-values.yaml 파일을 수정합니다. 선택적 구성 섹션에서는 contour-data-values.yaml 파일에서 사용자 지정할 수 있는 값과 대상 클러스터에서 Contour의 기본 동작을 수정하는 데 사용할 수 있는 방법을 설명합니다. 예를 들어 Contour 패키지는 기본적으로 두 개의 Contour 복제본을 배포하지만 복제본 수는 구성할 수 있습니다. 이 숫자를 contour-data-values.yamlcontour.replicas에서 설정합니다. 대부분의 경우 contour-data-values.yaml 파일을 수정할 필요가 없습니다.

    대상 클러스터에 대해 아래 명령을 실행하여 이러한 값을 검색할 수도 있습니다.

    tanzu package available get contour.tanzu.vmware.com/AVAILABLE-VERSION --values-schema
    

    여기서 AVAILABLE-VERSION은 Contour 패키지의 버전입니다. --values-schema 플래그는 Contour 패키지의 Package API 리소스에서 valuesSchema 섹션을 검색합니다. 값 스키마의 출력 형식인 --outputyaml, json 또는 table로 설정할 수 있습니다. 자세한 내용은 패키지 설치 및 관리에서 패키지를 참조하십시오.

    예:

    tanzu package available get contour.tanzu.vmware.com/1.17.1+vmware.1-tkg.1 --values-schema
    
  7. contour-data-values.yaml 파일에 주석이 포함된 경우 이를 제거합니다.

    yq -i eval '... comments=""' contour-data-values.yaml
    
  8. Contour 패키지를 설치합니다.

    1. 사용 가능한 패키지의 이름을 검색합니다.

      tanzu package available list -A
      
    2. 사용 가능한 패키지의 버전을 검색합니다.

      tanzu package available list contour.tanzu.vmware.com -A
      
    3. 패키지를 설치합니다.

      tanzu package install contour \
      --package contour.tanzu.vmware.com \
      --version AVAILABLE-PACKAGE-VERSION \
      --values-file contour-data-values.yaml \
      --namespace TARGET-NAMESPACE
      

      여기서:

      • TARGET-NAMESPACE는 Contour 패키지를 설치하려는 네임스페이스입니다. 예: my-packages 또는 tanzu-cli-managed-packages 네임스페이스.

        • --namespace 플래그를 지정하지 않으면 Tanzu CLI는 default 네임스페이스를 사용합니다. Contour 및 Envoy 포드, 그리고 ExternalDNS 구성 요소와 연결된 기타 리소스는 tanzu-system-ingress 네임스페이스에 생성됩니다. 이 네임스페이스에 ExternalDNS 패키지를 설치하지 마십시오.
        • 지정된 네임스페이스가 이미 존재해야 합니다(예: kubectl create namespace my-packages 실행).
      • AVAILABLE-PACKAGE-VERSION은 위에서 검색한 버전입니다.

      예:

      tanzu package install contour \
      --package contour.tanzu.vmware.com \
      --version 1.17.1+vmware.1-tkg.1 \
      --values-file contour-data-values.yaml \
      --namespace my-packages
      
  9. contour 패키지가 설치되었는지 확인합니다.

    tanzu package installed list -A
    

    예:

    tanzu package installed list -A
    - Retrieving installed packages...
      NAME            PACKAGE-NAME                     PACKAGE-VERSION                   STATUS               NAMESPACE
      cert-manager    cert-manager.tanzu.vmware.com    1.1.0+vmware.1-tkg.2              Reconcile succeeded  my-packages
      contour         contour.tanzu.vmware.com         1.17.1+vmware.1-tkg.1             Reconcile succeeded  my-packages
      antrea          antrea.tanzu.vmware.com                                            Reconcile succeeded  tkg-system
      [...]
    

    패키지에 대한 자세한 내용을 보려면 다음도 실행합니다.

    tanzu package installed get contour --namespace PACKAGE-NAMESPACE
    

    여기서 PACKAGE-NAMESPACEcontour 패키지가 설치되어 있는 네임스페이스입니다.

    예:

    tanzu package installed get contour --namespace my-packages
    \ Retrieving installation details for contour...
    NAME:                    contour
    PACKAGE-NAME:            contour.tanzu.vmware.com
    PACKAGE-VERSION:         1.17.1+vmware.1-tkg.1
    STATUS:                  Reconcile succeeded
    CONDITIONS:              [{ReconcileSucceeded True  }]
    USEFUL-ERROR-MESSAGE:
    
  10. contour 애플리케이션이 PACKAGE-NAMESPACE에서 조정되었는지 확인합니다.

    kubectl get apps -A
    

    예:

    NAMESPACE     NAME             DESCRIPTION           SINCE-DEPLOY   AGE
    my-packages   cert-manager     Reconcile succeeded   78s            3h5m
    my-packages   contour          Reconcile succeeded   57s            6m3s
    tkg-system    antrea           Reconcile succeeded   45s            3h18m
    [...]
    

    상태가 Reconcile Succeeded가 아닌 경우 contour 애플리케이션의 전체 상태 세부 정보를 확인합니다. 전체 상태를 확인하면 문제를 해결하는 데 도움이 될 수 있습니다.

    kubectl get app contour --namespace PACKAGE-NAMESPACE -o yaml
    

    여기서 PACKAGE-NAMESPACE는 패키지를 설치한 네임스페이스입니다. 문제 해결이 문제를 해결하는 데 도움이 되지 않을 경우 패키지를 다시 설치하기 전에 제거해야 합니다.

    tanzu package installed delete contour --namespace PACKAGE-NAMESPACE
    
  11. Contour 및 Envoy 포드가 tanzu-system-ingress 네임스페이스에서 실행되고 있는지 확인합니다.

    kubectl get pods -A
    

    예:

    kubectl get pods -A
    NAMESPACE              NAME                                                        READY   STATUS    RESTARTS   AGE
    [...]
    tanzu-system-ingress   contour-5dc6fc667c-c4w8k                                    1/1     Running   0          14m
    tanzu-system-ingress   contour-5dc6fc667c-jnqwn                                    1/1     Running   0          14m
    tanzu-system-ingress   envoy-mgfll                                                 2/2     Running   0          14m
    [...]
    
  12. Contour를 AWS 또는 Azure에 배포한 경우 Envoy 서비스에 대해 로드 밸런서가 생성되었는지 확인합니다.

    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
    

    AWS에서 로드 밸런서의 이름은 aabaaad4dfc8e4a808a70a7cbf7d9249-1201421080.us-west-2.elb.amazonaws.com과 유사합니다. Azure에서는 20.54.226.44와 유사한 IP 주소가 됩니다.

원격으로 Envoy 관리 인터페이스 액세스

Contour를 클러스터에 배포한 후에는 내장된 Envoy 관리 인터페이스를 사용하여 배포에 대한 데이터를 검색할 수 있습니다.

Envoy 관리 인터페이스에 대한 자세한 내용은 Envoy 설명서에서 관리 인터페이스를 참조하십시오.

  1. Envoy 포드의 이름을 가져옵니다.

    ENVOY_POD=$(kubectl -n tanzu-system-ingress get pod -l app=envoy -o name | head -1)
    
  2. Envoy 포드를 부트스트랩 시스템의 포트 9001로 전달합니다.

    kubectl -n tanzu-system-ingress port-forward $ENVOY_POD 9001
    
  3. 부트스트랩 시스템에서 curl 쿼리를 Envoy 관리 인터페이스 액세스에 나열된 Envoy 관리 끝점에 전송하여 Contour 배포에서 정보를 검색합니다. 예를 들어 /config_dump 끝점을 사용하여 현재 로드된 구성을 검색합니다.

    curl http://localhost:9001/config_dump
    

내부 Contour DAG(방향성 비순환 그래프) 시각화

클러스터에서 워크로드 실행을 시작한 경우 Contour가 DAG(방향성 비순환 그래프) 형태로 노출하는 트래픽 정보를 시각화할 수 있습니다.

  1. Graphviz가 아직 설치되지 않았다면 설치합니다. 이 패키지는 DAG 이미지 파일을 생성하는 dot 명령을 제공합니다.

  2. Contour 포드의 이름을 가져옵니다.

    CONTOUR_POD=$(kubectl -n tanzu-system-ingress get pod -l app=contour -o name | head -1)
    
  3. Contour 포드에서 포트 6060을 전달합니다.

    kubectl -n tanzu-system-ingress port-forward $CONTOUR_POD 6060
    
  4. 새 터미널 창을 열고 DAG를 다운로드하여 *.png 파일로 저장합니다. 아래 명령을 실행하려면 시스템에 아직 없는 경우 dot를 설치해야 합니다.

    curl localhost:6060/debug/dag | dot -T png > contour-dag.png
    
  5. contour-dag.png를 열어서 그래프를 확인합니다.

    Contour DAG 파일

선택적 구성

Contour 패키지 구성 파일에서 기본값을 편집하여 구성을 추가로 사용자 지정할 수 있습니다.

아래 표에는 contour-data-values.yaml 파일에서 사용자 지정할 수 있는 값과 워크로드 클러스터에 배포될 때 Contour의 기본 동작을 수정하는 데 사용할 수 있는 방법이 나와 있습니다.

초기 배포 후에 Contour 설정을 재구성하는 경우 실행 중인 Contour 배포 업데이트의 단계에 따라 클러스터에 새 구성을 적용해야 합니다.

구성 기본값 설명
certificates.duration 8760h Contour와 Envoy 간의 통신을 보호하는 인증서의 유효한 시간.
certificates.renewBefore 360h 만료되기 전까지 Contour와 Envoy 간의 통신을 보호하는 인증서를 갱신해야 하는 시간.
contour.configFileContents 없음 Contour 구성 파일의 YAML 컨텐츠. 자세한 내용은 Contour 설명서에서 구성 파일을 참조하십시오.
contour.replicas 2 포함할 Contour 포드 복제본의 수.
contour.useProxyProtocol false 모든 Envoy 수신기에 PROXY 프로토콜을 사용하도록 설정할지 여부.
contour.logLevel info Contour 로그 수준. 올바른 값은 infodebug입니다.
contour.pspNames vmware-system-restricted Contour 포드에 적용할 쉼표로 구분된 포드 보안 정책(PSP) 목록입니다.
envoy.service.type 없음 Envoy에 프로비저닝할 Kubernetes 서비스의 유형. 올바른 값은 LoadBalancer, NodePort, ClusterIP입니다. 지정하지 않으면 NodePort 서비스가 다른 모든 대상 플랫폼의 vsphereLoadBalancer에 사용됩니다.
envoy.service.externalTrafficPolicy Local Envoy 서비스의 외부 트래픽 정책. 올바른 값은 LocalCluster입니다.
envoy.service.annotations 없음 Envoy 서비스에 설정할 주석.
envoy.service.loadBalancerIP 없음 Envoy 서비스에 원하는 로드 밸런서 IP. 이 설정은 envoy.service.typeLoadBalancer로 설정되지 않으면 무시됩니다.
envoy.service.nodePorts.http 없음 envoy.service.type == NodePort인 경우 Envoy의 HTTP 수신기를 노출할 노드 포트 번호. 지정하지 않으면 Kubernetes에서 노드 포트를 자동으로 할당합니다.
envoy.service.nodePorts.https 없음 envoy.service.type == NodePort인 경우 Envoy의 HTTPS 수신기를 노출할 노드 포트 번호. 지정하지 않으면 Kubernetes에서 노드 포트를 자동으로 할당합니다.
envoy.service.aws.LBType classic infrastructure_provider == aws인 경우 사용할 AWS 로드 밸런서의 유형. 올바른 값은 classicnlb입니다. aws를 사용하지 않는 경우 이 값은 무시됩니다.
envoy.hostPorts.enable false Envoy 포드에 호스트 포트를 사용하도록 설정할지 여부. false인 경우 envoy.hostPorts.httpenvoy.hostPorts.https가 무시됩니다.
envoy.hostPorts.http 80 envoy.hostPorts.enable == true인 경우 Envoy의 HTTP 수신기를 노출할 호스트 포트 번호.
envoy.hostPorts.https 443 envoy.hostPorts.enable == true인 경우 Envoy의 HTTPS 수신기를 노출할 호스트 포트 번호.
envoy.hostNetwork false Envoy 포드에 호스트 네트워킹을 사용하도록 설정할지 여부.
envoy.terminationGracePeriodSeconds 300 Envoy 포드의 종료 유예 시간(초).
envoy.logLevel info Envoy 로그 수준. 올바른 값은 trace, debug, info, warn, error, critical, off입니다.
envoy.pspNames 없음 Envoy 포드에 적용할 쉼표로 구분된 포드 보안 정책(PSP) 목록입니다.
infrastructure_provider vsphere 기본 대상 플랫폼입니다. 올바른 값은 vsphere, aws, azure입니다.
loadBalancerIP 없음 Envoy 서비스에 원하는 로드 밸런서 IP. 이 설정은 envoy.service.typeLoadBalancer로 설정되지 않으면 무시됩니다.
namespace tanzu-system-ingress Contour 및 Envoy 포드가 실행되는 네임스페이스, 패키지가 배포된 위치와는 별개.

실행 중인 Contour 배포 업데이트

배포 후 Contour 패키지의 구성을 변경해야 하는 경우 아래 단계에 따라 배포된 Contour 패키지를 업데이트합니다.

  1. contour-data-values.yaml 파일에서 Contour 구성을 업데이트합니다. 예를 들어 contour.replicas를 새 값으로 설정하여 Contour 복제본의 수를 변경할 수 있습니다.

  2. 설치된 패키지를 업데이트합니다.

    tanzu package installed update contour \
    --version INSTALLED-PACKAGE-VERSION \
    --values-file contour-data-values.yaml \
    --namespace INSTALLED-PACKAGE-NAMESPACE
    

    형식 설명:

    • INSTALLED-PACKAGE-VERSION은 설치된 Contour 패키지의 버전입니다.
    • INSTALLED-PACKAGE-NAMESPACE는 Contour 패키지가 설치된 네임스페이스입니다.

    예:

    tanzu package installed update contour \
    --version 1.17.1+vmware.1-tkg.1 \
    --values-file contour-data-values.yaml \
    --namespace my-packages
    

    Contour 패키지가 새 값 또는 추가한 값을 사용하여 조정됩니다. kapp-controller가 변경 내용을 적용하는 데 최대 5분이 걸릴 수 있습니다.

    tanzu package installed update 명령에 대한 자세한 내용은 패키지 설치 및 관리에서 패키지 업데이트를 참조하십시오. 이 명령을 사용하여 설치된 패키지의 버전 또는 구성을 업데이트할 수 있습니다.

check-circle-line exclamation-circle-line close-line
Scroll to top icon