이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
하이브리드 노드용 웹후크 구성
이 페이지에서는 하이브리드 노드에서 웹후크를 실행하는 것과 관련된 고려 사항을 자세히 설명합니다. 웹후크는 Kubernetes 애플리케이션과 AWS 로드 밸런서 컨트롤러 및 CloudWatch 관찰성 에이전트와 같은 오픈 소스 프로젝트에서 런타임 시 변경 및 검증 기능을 수행하는 데 사용됩니다.
라우팅 가능한 포드 네트워크
온프레미스 네트워크에서 온프레미스 포드 CIDR을 라우팅할 수 있는 경우 하이브리드 노드에서 웹후크를 실행할 수 있습니다. Border Gateway Protocol(BGP), 정적 경로 또는 기타 사용자 지정 라우팅 솔루션을 포함하여 온프레미스 네트워크에서 온프레미스 포드 CIDR을 라우팅 가능하도록 하는 데 몇 가지 기법을 사용할 수 있습니다. BGP는 사용자 지정 또는 수동 라우팅 구성이 필요한 대체 솔루션보다 더 확장성이 뛰어나고 관리하기 쉽기 때문에 권장되는 솔루션입니다. AWS는 포드 CIDR을 알리는 데 Cilium 및 Calico의 BGP 기능을 지원합니다. 자세한 내용은 하이브리드 노드에 대한 CNI 구성 및 라우팅 가능한 원격 포드 CIDR 섹션을 참조하세요.
라우팅 불가능한 포드 네트워크
온프레미스 네트워크에서 온프레미스 포드 CIDR을 라우팅 가능하도록 할 수 없고 웹후크를 실행해야 하는 경우 하이브리드 노드와 동일한 EKS 클러스터의 클라우드 노드에서 모든 웹후크를 실행하는 것이 좋습니다.
혼합 모드 클러스터 고려 사항
혼합 모드 클러스터는 하이브리드 노드와 노드가 모두 AWS 클라우드에서 실행되는 EKS 클러스터로 정의됩니다. 혼합 모드 클러스터를 실행할 때는 다음 권장 사항을 고려하세요.
-
AWS 클라우드의 노드에서 VPC CNI를 실행하고 하이브리드 노드에서 Cilium 또는 Calico를 실행합니다. Cilium 및 Calico는 AWS 클라우드의 노드에서 실행할 때 AWS에서 지원되지 않습니다.
-
AWS 클라우드의 노드에서 실행되도록 웹후크를 구성합니다. AWS 및 커뮤니티 추가 기능용 웹후크를 구성하는 방법은 추가 기능을 위한 웹후크 구성을 참조하세요.
-
애플리케이션이 하이브리드 노드에서 실행되는 포드와 직접 통신(‘동서 통신’)하기 위해 AWS 클라우드의 노드에서 실행되는 포드가 필요하고, 하이브리드 노드에서 AWS 클라우드 및 Cilium 또는 Calico의 노드에서 VPC CNI를 사용하는 경우 온프레미스 포드 CIDR은 온프레미스 네트워크에서 라우팅 가능해야 합니다.
-
AWS 클라우드의 노드에서 하나 이상의 CoreDNS 복제본을 실행하고 하이브리드 노드에서 하나 이상의 CoreDNS 복제본을 실행합니다.
-
서비스 트래픽을 트래픽이 시작되는 영역에 로컬로 유지하도록 서비스 트래픽 분산을 구성합니다. 서비스 트래픽 분산에 대한 자세한 내용은 서비스 트래픽 분산 구성을 참조하세요.
-
하이브리드 노드에서 실행되는 워크로드 트래픽에 AWS Application Load Balancer(ALB) 또는 Network Load Balancer(NLB)를 사용하는 경우 ALB 또는 NLB와 함께 사용되는 IP 대상이 AWS에서 라우팅 가능해야 합니다.
-
Metrics Server 추가 기능을 사용하려면 EKS 컨트롤 플레인에서 Metrics Server 포드 IP 주소로의 연결이 필요합니다. 하이브리드 노드에서 Metrics Server 추가 기능을 실행하는 경우 온프레미스 포드 CIDR이 온프레미스 네트워크에서 라우팅 가능해야 합니다.
-
Amazon Managed Service for Prometheus(AMP) 관리형 수집기를 사용하여 하이브리드 노드에 대한 지표를 수집하려면 온프레미스 포드 CIDR이 온프레미스 네트워크에서 라우팅 가능해야 합니다. 또는 AWS 클라우드에서 실행되는 EKS 컨트롤 플레인 지표와 리소스에 AMP 관리형 수집기를 사용하고, AWS Distro for OpenTelemetry(ADOT) 추가 기능을 사용하여 하이브리드 노드에 대한 지표를 수집할 수 있습니다.
혼합 모드 클러스터 구성
클러스터에서 실행되는 변형 및 검증 웹후크를 보려면 클러스터의 EKS 콘솔의 리소스 패널에서 확장 리소스 유형을 보거나 다음 명령을 사용할 수 있습니다. 또한 EKS는 클러스터 관찰성 대시보드에 웹후크 지표를 보고합니다. 자세한 내용은 관찰성 대시보드를 사용하여 클러스터 모니터링 섹션을 참조하세요.
kubectl get mutatingwebhookconfigurations
kubectl get validatingwebhookconfigurations
서비스 트래픽 분산 구성
혼합 모드 클러스터를 실행할 때 서비스 트래픽 분산
Cilium을 CNI로 사용하는 경우 enable-service-topology
가 true
로 설정된 CNI를 실행하여 서비스 트래픽 분산을 활성화해야 합니다. Helm 설치 플래그 --set loadBalancer.serviceTopology=true
를 사용하여 이 구성을 전달하거나 Cilium CLI 명령 cilium config set enable-service-topology true
를 사용하여 기존 설치를 업데이트할 수 있습니다. 기존 설치의 구성을 업데이트한 후 각 노드에서 실행되는 Cilium 에이전트를 다시 시작해야 합니다.
다음 섹션에서는 CoreDNS 서비스에 대한 서비스 트래픽 분산을 구성하는 방법의 예를 보여줍니다. 의도치 않은 교차 환경 트래픽을 방지하기 위해 클러스터의 모든 서비스에 대해 동일한 설정을 활성화하는 것이 좋습니다.
CoreDNS 복제본 구성
혼합 모드 클러스터를 실행하는 경우 하이브리드 노드에는 하나 이상의 CoreDNS 복제본을 사용하고, AWS 클라우드의 노드에는 하나 이상의 CoreDNS 복제본을 사용하는 것이 좋습니다.
-
topology.kubernetes.io/zone: onprem
과 같이 각 하이브리드 노드에 대한 토폴로지 영역 레이블을 추가합니다. 또는nodeadm
구성에서 레이블을 지정하여nodeadm init
단계에서 레이블을 설정할 수 있습니다. kubelet 사용자 지정을 위한 노드 구성(선택 사항) 섹션을 참조하세요. AWS 클라우드에서 실행되는 노드는 노드의 가용 영역(AZ)에 해당하는 토폴로지 영역 레이블이 자동 적용됩니다.kubectl label node
hybrid-node-name
topology.kubernetes.io/zone=zone
-
토폴로지 영역 키가 있는 CoreDNS 배포에
podAntiAffinity
를 추가합니다. 또는 설치 중에 EKS 추가 기능을 사용하여 CoreDNS 배포를 구성할 수 있습니다.kubectl edit deployment coredns -n kube-system
spec: template: spec: affinity: ... podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - key: k8s-app operator: In values: - kube-dns topologyKey: kubernetes.io/hostname weight: 100 - podAffinityTerm: labelSelector: matchExpressions: - key: k8s-app operator: In values: - kube-dns topologyKey: topology.kubernetes.io/zone weight: 50 ...
-
서비스 트래픽 분배를 활성화하려면
kube-dns
서비스 구성에trafficDistribution: PreferClose
설정을 추가합니다.kubectl patch svc kube-dns -n kube-system --type=merge -p '{ "spec": { "trafficDistribution": "PreferClose" } }'
-
kube-dns
서비스의 엔드포인트 조각을 확인하여 서비스 트래픽 분산이 활성화되었는지 확인할 수 있습니다. 엔드포인트 조각에 서비스 트래픽 분산이 활성화되었음을 확인하는 토폴로지 영역 레이블의hints
가 표시되어야 합니다. 각 엔드포인트 주소에 대해hints
가 표시되지 않으면 서비스 트래픽 분산이 활성화되지 않은 것입니다.kubectl get endpointslice -A | grep "kube-dns"
kubectl get endpointslice [.replaceable]`kube-dns-<id>` -n kube-system -o yaml
addressType: IPv4 apiVersion: discovery.k8s.io/v1 endpoints: - addresses: - <your-hybrid-node-pod-ip> hints: forZones: - name: onprem nodeName: <your-hybrid-node-name> zone: onprem - addresses: - <your-cloud-node-pod-ip> hints: forZones: - name: us-west-2a nodeName: <your-cloud-node-name> zone: us-west-2a
추가 기능을 위한 웹후크 구성
다음 추가 기능은 웹후크를 사용하고 하이브리드 노드에서 사용할 수 있습니다.
-
AWS 로드 밸런서 컨트롤러
-
CloudWatch 관찰성 에이전트
-
AWS Distro for OpenTelemetry(ADOT)
-
cert-manager
이러한 추가 기능이 AWS 클라우드의 노드에서 실행하도록 사용하는 웹후크를 구성하려면 다음 섹션을 참조하세요.
AWS 로드 밸런서 컨트롤러
혼합 모드 클러스터 설정에서 AWS 로드 밸런서 컨트롤러를 사용하려면 AWS 클라우드의 노드에서 컨트롤러를 실행해야 합니다. 이렇게 하려면 Helm 값 구성에 다음을 추가하거나 EKS 추가 기능 구성을 사용하여 값을 지정합니다.
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid
CloudWatch 관찰성 에이전트
CloudWatch 관찰성 에이전트 추가 기능에는 웹후크를 사용하는 Kubernetes 연산자가 있습니다. 혼합 모드 클러스터 설정의 AWS 클라우드에 있는 노드에서 연산자를 실행하려면 CloudWatch Observability Agent 연산자 구성을 편집합니다. Helm 및 EKS 추가 기능을 사용하여 설치하는 동안에는 연산자 선호도를 구성할 수 없습니다(컨테이너-로드맵 문제 #2431
kubectl edit -n amazon-cloudwatch deployment amazon-cloudwatch-observability-controller-manager
spec: ... template: ... spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid
AWS Distro for OpenTelemetry(ADOT)
AWS Distro for OpenTelemetry(ADOT) 추가 기능에는 웹후크를 사용하는 Kubernetes 연산자가 있습니다. 혼합 모드 클러스터 설정의 AWS 클라우드에 있는 노드에서 연산자를 실행하려면 Helm 값 구성에 다음을 추가하거나 EKS 추가 기능 구성을 사용하여 값을 지정합니다.
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid
포드 CIDR이 온프레미스 네트워크에서 라우팅 가능하지 않은 경우 하이브리드 노드 및 해당 노드에서 실행 중인 워크로드에서 지표를 스크레이프할 수 있도록 ADOT Collector가 하이브리드 노드에서 실행되어야 합니다. 이렇게 하려면 사용자 지정 리소스 정의(CRD)를 편집합니다.
kubectl -n opentelemetry-operator-system edit opentelemetrycollectors.opentelemetry.io adot-col-prom-metrics
spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid
ADOT Collector CRD 구성의 각 scrape_configs
에 다음 relabel_configs
를 추가하여 하이브리드 노드 및 하이브리드 노드에서 실행되는 리소스의 지표만 스크레이프하도록 ADOT Collector를 구성할 수 있습니다.
relabel_configs: - action: keep regex: hybrid source_labels: - __meta_kubernetes_node_label_eks_amazonaws_com_compute_type
ADOT 추가 기능에는 ADOT 연산자 웹후크에서 사용하는 TLS 인증서에 대해cert-manager
를 설치하기 위한 사전 요구 사항이 있습니다. 또한 cert-manager
는 웹후크를 실행하고 다음 Helm 값 구성을 사용하여 AWS 클라우드의 노드에서 실행되도록 구성할 수 있습니다.
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid webhook: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid cainjector: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid startupapicheck: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid
cert-manager
또한 cert-manager
추가 기능은 웹후크를 실행하며, 다음 Helm 값 구성을 사용하여 AWS 클라우드의 노드에서 실행되도록 구성할 수 있습니다.
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid webhook: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid cainjector: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid startupapicheck: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid