이 항목에서는 Contour를 Tanzu Kubernetes Grid의 워크로드에 배포하는 방법을 설명합니다.
Contour는 Envoy 에지 및 서비스 프록시를 사용하는 Kubernetes 수신 컨트롤러입니다. Tanzu Kubernetes Grid에는 Contour 및 Envoy용 서명된 바이너리를 포함하며, 이러한 바이너리를 워크로드 클러스터에 배포하여 해당 클러스터에서 수신 제어 서비스를 제공할 수 있습니다.
Contour 및 Envoy를 워크로드 클러스터에 직접 배포합니다. Prometheus, Grafana, Harbor 패키지를 배포하려면 Contour를 배포해야 합니다.
수신 제어에 대한 일반적인 내용은 Kubernetes 설명서의 수신 컨트롤러를 참조하십시오.
kubectl
( vSphere with Tanzu Supervisor와 함께 사용할 Tanzu CLI 및 Kubernetes CLI 설치 또는 독립형 관리 클러스터에 사용할 Tanzu CLI 및 Kubernetes CLI 설치에 설명되어 있음).중요이 Tanzu Kubernetes Grid 릴리스에서 제공된 Contour 및 Envoy 구현에서는 자체 서명된 인증서를 사용 중인 것으로 가정합니다.
클러스터를 준비하려면 다음을 수행합니다.
Contour를 배포할 워크로드 클러스터의 admin
자격 증명을 가져옵니다. 예:
tanzu cluster kubeconfig get my-cluster --admin
위 예에서 my-cluster
는 클러스터의 이름입니다.
kubectl
의 컨텍스트를 클러스터로 설정합니다. 예:
kubectl config use-context my-cluster-admin@my-cluster
Contour 패키지가 설치된 패키지 저장소(예: tanzu-standard
저장소)가 클러스터에 없는 경우 다음을 설치합니다.
tanzu package repository add PACKAGE-REPO-NAME --url PACKAGE-REPO-ENDPOINT --namespace tkg-system
여기서:
PACKAGE-REPO-NAME
은 패키지 저장소의 이름(예: tanzu-standard
또는 ADDITIONAL_IMAGE_REGISTRY
변수로 구성된 개인 이미지 레지스트리의 이름입니다.PACKAGE-REPO-ENDPOINT
는 패키지 저장소의 URL입니다.
tanzu-standard
URL은 projects.registry.vmware.com/tkg/packages/standard/repo:v2023.10.16
입니다. Tanzu CLI에서 이 값을 가져오려면 패키지 저장소 나열을 참조하거나 Tanzu Mission Control의 클러스터(Cluster) 창에서 추가 기능(Addons) > 저장소(Repositories) 목록을 참조하십시오.아직 설치하지 않은 경우 클러스터에 cert-manager를 설치합니다. 지침은 인증 관리를 위한 cert-manager 설치를 참조하십시오.
아래의 워크로드 클러스터에 Contour 배포로 진행합니다.
클러스터를 설정한 후에는 먼저 Contour 패키지를 설치한 다음, 패키지를 설치할 때 사용되는 구성 파일을 생성해야 합니다.
패키지의 기본 구성을 검색하여 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
).
contour-data-values.yaml
파일에서 다음을 구성합니다:
---
infrastructure_provider: vsphere
namespace: tanzu-system-ingress
contour:
configFileContents: {}
useProxyProtocol: false
replicas: 2
pspNames: "vmware-system-restricted"
logLevel: info
envoy:
service:
type: NodePort
annotations: {}
externalTrafficPolicy: Cluster
disableWait: false
hostPorts:
enable: true
http: 80
https: 443
hostNetwork: false
terminationGracePeriodSeconds: 300
logLevel: info
certificates:
duration: 8760h
renewBefore: 360h
---
infrastructure_provider: aws
namespace: tanzu-system-ingress
contour:
configFileContents: {}
useProxyProtocol: false
replicas: 2
pspNames: "vmware-system-restricted"
logLevel: info
envoy:
service:
type: LoadBalancer
annotations: {}
externalTrafficPolicy: Cluster
aws:
LBType: classic
disableWait: false
hostPorts:
enable: true
http: 80
https: 443
hostNetwork: false
terminationGracePeriodSeconds: 300
logLevel: info
certificates:
duration: 8760h
renewBefore: 360h
---
infrastructure_provider: azure
namespace: tanzu-system-ingress
contour:
configFileContents: {}
useProxyProtocol: false
replicas: 2
pspNames: "vmware-system-restricted"
logLevel: info
envoy:
service:
type: LoadBalancer
annotations: {}
externalTrafficPolicy: Cluster
disableWait: false
hostPorts:
enable: true
http: 80
https: 443
hostNetwork: false
terminationGracePeriodSeconds: 300
logLevel: info
certificates:
duration: 8760h
renewBefore: 360h
vSphere with Tanzu Supervisor를 사용하여 생성된 워크로드 클러스터에 Contour를 설치하는 경우 다음 중 하나를 수행합니다.
hostPorts
사용 안 함:
Envoy 데몬세트에 hostPorts
가 필요하지 않은 경우 contour-data-values.yaml
을 편집하여 envoy.hostPorts.enable
을 false
로 설정합니다.
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
NSX ALB를 로드 밸런서 서비스 제공자로 사용하는 vSphere 클러스터에 Contour를 설치하는 경우 contour-default-values.yaml
파일을 수정하여 envoy.service.type
을 LoadBalancer
로 설정합니다.
[...]
envoy:
service:
type: LoadBalancer
인터넷 제한 AWS 환경에 Contour를 설치하는 경우 contour-data-values.yaml
파일을 수정하여 Envoy 서비스에 다음 주석을 추가합니다.
infrastructure_provider: aws
[...]
envoy:
service:
annotations:
service.beta.kubernetes.io/aws-load-balancer-internal: "true"
(선택 사항) 필요한 경우 contour-data-values.yaml
파일을 수정합니다. 선택적 구성 섹션에서는 contour-data-values.yaml
파일에서 사용자 지정할 수 있는 값과 대상 클러스터에서 Contour의 기본 동작을 수정하는 데 사용할 수 있는 방법을 설명합니다. 예를 들어 Contour 패키지는 기본적으로 두 개의 Contour 복제본을 배포하지만 복제본 수는 구성할 수 있습니다. 이 숫자를 contour-data-values.yaml
의 contour.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
섹션을 검색합니다. 값 스키마의 출력 형식인 --output
를 yaml
, json
또는 table
로 설정할 수 있습니다. 자세한 내용은 패키지 설치 및 관리에서 패키지를 참조하십시오.
예:
tanzu package available get contour.tanzu.vmware.com/1.25.4+vmware.1-tkg.1 --values-schema
contour-data-values.yaml
파일에 주석이 포함된 경우 이를 제거합니다.
yq -i eval '... comments=""' contour-data-values.yaml
Contour 패키지를 설치합니다.
사용 가능한 패키지의 이름을 검색합니다.
tanzu package available list -A
사용 가능한 패키지의 버전을 검색합니다.
tanzu package available list contour.tanzu.vmware.com -A
패키지를 설치합니다.
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.25.4+vmware.1-tkg.1 \
--values-file contour-data-values.yaml \
--namespace my-packages
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.10.1+vmware.1-tkg.1 Reconcile succeeded my-packages
contour contour.tanzu.vmware.com 1.25.4+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-NAMESPACE
는 contour
패키지가 설치되어 있는 네임스페이스입니다.
예:
tanzu package installed get contour --namespace my-packages
\ Retrieving installation details for contour...
NAME: contour
PACKAGE-NAME: contour.tanzu.vmware.com
PACKAGE-VERSION: 1.25.4+vmware.1-tkg.1
STATUS: Reconcile succeeded
CONDITIONS: [{ReconcileSucceeded True }]
USEFUL-ERROR-MESSAGE:
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
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
[...]
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 주소가 됩니다.
Contour를 클러스터에 배포한 후에는 내장된 Envoy 관리 인터페이스를 사용하여 배포에 대한 데이터를 검색할 수 있습니다.
Envoy 관리 인터페이스에 대한 자세한 내용은 Envoy 설명서에서 관리 인터페이스를 참조하십시오.
Envoy 포드의 이름을 가져옵니다.
ENVOY_POD=$(kubectl -n tanzu-system-ingress get pod -l app=envoy -o name | head -1)
Envoy 포드를 부트스트랩 시스템의 포트 9001로 전달합니다.
kubectl -n tanzu-system-ingress port-forward $ENVOY_POD 9001
부트스트랩 시스템에서 curl
쿼리를 Envoy 관리 인터페이스 액세스에 나열된 Envoy 관리 끝점에 전송하여 Contour 배포에서 정보를 검색합니다. 예를 들어 /config_dump
끝점을 사용하여 현재 로드된 구성을 검색합니다.
curl http://localhost:9001/config_dump
클러스터에서 워크로드 실행을 시작한 경우 Contour가 DAG(방향성 비순환 그래프) 형태로 노출하는 트래픽 정보를 시각화할 수 있습니다.
Graphviz가 아직 설치되지 않았다면 설치합니다. 이 패키지는 DAG 이미지 파일을 생성하는 dot
명령을 제공합니다.
Contour 포드의 이름을 가져옵니다.
CONTOUR_POD=$(kubectl -n tanzu-system-ingress get pod -l app=contour -o name | head -1)
Contour 포드에서 포트 6060을 전달합니다.
kubectl -n tanzu-system-ingress port-forward $CONTOUR_POD 6060
새 터미널 창을 열고 DAG를 다운로드하여 *.png
파일로 저장합니다. 아래 명령을 실행하려면 시스템에 아직 없는 경우 dot
를 설치해야 합니다.
curl localhost:6060/debug/dag | dot -T png > contour-dag.png
contour-dag.png
를 열어서 그래프를 확인합니다.
Contour 패키지 구성 파일에서 기본값을 편집하여 구성을 추가로 사용자 지정할 수 있습니다.
아래 표에는 contour-data-values.yaml
파일에서 사용자 지정할 수 있는 값과 워크로드 클러스터에 배포될 때 Contour의 기본 동작을 수정하는 데 사용할 수 있는 방법이 나와 있습니다.
초기 배포 후에 Contour 설정을 재구성하는 경우 실행 중인 Contour 배포 업데이트의 단계에 따라 클러스터에 새 구성을 적용해야 합니다.
구성 | 기본값 | 설명 |
---|---|---|
infrastructure_provider |
vsphere |
기본 대상 플랫폼입니다. 올바른 값은 vsphere , aws , azure 입니다. |
kubernetes_distribution |
없음 | 배포별 구성을 적용해야 하는지 여부를 결정하는 데 사용되는 Kubernetes의 분포입니다. 옵션은 비어 있고 openshift입니다. Openshift 클러스터에서 실행 중인 경우 openshift로 설정해야 합니다. openshift로 설정하면 Contour의 컨트롤러를 적절한 Openshift 보안 컨텍스트 제약 조건 리소스와 연결하기 위해 Role 및 RoleBinding이 생성됩니다. |
kubernetes_version |
없음 | 버전별 동작을 사용하도록 설정하기 위해 사용 중인 Kubernetes 버전입니다. 유효한 kubernetes major.minor.patch 버전을 수락합니다. 이 필드는 선택 사항입니다. 현재는 kubernetes_distribution openshift로 설정된 경우에만 적용됩니다. |
namespace |
tanzu-system-ingress |
Contour 및 Envoy 포드가 실행되는 네임스페이스, 패키지가 배포된 위치와는 별개. |
registry_secret_names |
["contour-reg-creds"] |
Contour 및 Envoy 이미지를 끌어오기 위한 레지스트리 자격 증명을 포함하는 자리 표시자 암호의 이름입니다. |
contour.configFileContents |
없음 | Contour 구성 파일의 YAML 컨텐츠. 자세한 내용은 Contour 설명서에서 구성 파일을 참조하십시오. |
contour.replicas |
2 |
포함할 Contour 포드 복제본의 수. |
contour.useProxyProtocol |
false |
모든 Envoy 수신기에 PROXY 프로토콜을 사용하도록 설정할지 여부. |
contour.logLevel |
info |
Contour 로그 수준. 올바른 값은 info 및 debug 입니다. |
contour.pspNames |
vmware-system-restricted |
Contour 포드에 적용할 쉼표로 구분된 포드 보안 정책(PSP) 목록입니다. |
contour.resources.contour.limits.cpu |
없음 | Contour 배포의 Contour 컨테이너에 적용할 CPU 제한입니다. |
contour.resources.contour.limits.memory |
없음 | Contour 배포의 Contour 컨테이너에 적용할 메모리 제한입니다. |
contour.resources.contour.requests.cpu |
없음 | Contour 배포의 Contour 컨테이너에 적용할 CPU 요청입니다. |
contour.resources.contour.requests.memory |
없음 | Contour 배포의 Contour 컨테이너에 적용할 메모리 요청입니다. |
envoy.workload.type |
DaemonSet |
Kubernetes 워크로드 Envoy의 유형은 다음으로 배포됩니다. 옵션은 Deployment 또는 DaemonSet 입니다. |
envoy.workload.replicas |
2 |
envoy.workload.type 이 Deployment 로 설정된 경우 배포할 Envoy 복제본의 수입니다. |
envoy.workload.resources.envoy.limits.cpu |
없음 | Envoy 워크로드의 Envoy 컨테이너에 적용할 CPU 제한입니다. |
envoy.workload.resources.envoy.limits.memory |
없음 | Envoy 워크로드의 Envoy 컨테이너에 적용할 메모리 제한입니다. |
envoy.workload.resources.envoy.requests.cpu |
없음 | Envoy 워크로드의 Envoy 컨테이너에 적용할 CPU 요청입니다. |
envoy.workload.resources.envoy.requests.memory |
없음 | Envoy 워크로드의 Envoy 컨테이너에 적용할 메모리 요청입니다. |
envoy.workload.resources.shutdownManager.limits.cpu |
없음 | Envoy 워크로드의 shutdown-manager 컨테이너에 적용할 CPU 제한입니다. |
envoy.workload.resources.shutdownManager.limits.memory |
없음 | Envoy 워크로드의 shutdown-manager 컨테이너에 적용할 메모리 제한입니다. |
envoy.workload.resources.shutdownManager.requests.cpu |
없음 | Envoy 워크로드의 shutdown-manager 컨테이너에 적용할 CPU 요청입니다. |
envoy.workload.resources.shutdownManager.limits.memory |
없음 | Envoy 워크로드의 shutdown-manager 컨테이너에 적용할 메모리 요청입니다. |
envoy.service.type |
없음 | Envoy에 프로비저닝할 Kubernetes 서비스의 유형. 올바른 값은 LoadBalancer , NodePort , ClusterIP 입니다. 지정하지 않으면 NodePort 서비스가 다른 모든 대상 플랫폼의 vsphere 와 LoadBalancer 에 사용됩니다. |
envoy.service.loadBalancerIP |
없음 | Envoy 서비스에 원하는 로드 밸런서 IP. 이 설정은 envoy.service.type 이 LoadBalancer 로 설정되지 않으면 무시됩니다. |
envoy.service.externalTrafficPolicy |
Local |
Envoy 서비스의 외부 트래픽 정책. 올바른 값은 Local 및 Cluster 입니다. |
envoy.service.annotations |
없음 | Envoy 서비스에 설정할 주석. |
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 로드 밸런서의 유형. 올바른 값은 classic 및 nlb 입니다. aws 를 사용하지 않는 경우 이 값은 무시됩니다. |
envoy.hostPorts.enable |
false |
Envoy 포드에 호스트 포트를 사용하도록 설정할지 여부. false 인 경우 envoy.hostPorts.http 및 envoy.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) 목록입니다. |
certificates.duration |
8760h |
Contour와 Envoy 간의 통신을 보호하는 인증서의 유효한 시간. |
certificates.renewBefore |
360h |
만료되기 전까지 Contour와 Envoy 간의 통신을 보호하는 인증서를 갱신해야 하는 시간. |
배포 후 Contour 패키지의 구성을 변경해야 하는 경우 아래 단계에 따라 배포된 Contour 패키지를 업데이트합니다.
contour-data-values.yaml
파일에서 Contour 구성을 업데이트합니다. 예를 들어 contour.replicas
를 새 값으로 설정하여 Contour 복제본의 수를 변경할 수 있습니다.
설치된 패키지를 업데이트합니다.
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.25.4+vmware.1-tkg.1 \
--values-file contour-data-values.yaml \
--namespace my-packages
Contour 패키지가 새 값 또는 추가한 값을 사용하여 조정됩니다. kapp-controller
가 변경 내용을 적용하는 데 최대 5분이 걸릴 수 있습니다.
tanzu package installed update
명령에 대한 자세한 내용은 패키지 설치 및 관리에서 패키지 업데이트를 참조하십시오. 이 명령을 사용하여 설치된 패키지의 버전 또는 구성을 업데이트할 수 있습니다.