이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
하이브리드 노드에 대한 CNI 구성
Cilium은 Amazon EKS Hybrid Nodes용 AWS 지원 CNI(컨테이너 네트워킹 인터페이스)입니다. 워크로드에 대비하려면 하이브리드 노드용 CNI를 설치해야 합니다. 하이브리드 노드는 CNI가 실행될 때까지 Not Ready
상태로 표시됩니다. Helm과 같은 도구를 선택하여 이러한 CNI를 관리할 수 있습니다. 이 페이지의 지침에서는 Cilium 수명 주기 관리(설치, 업그레이드, 삭제)를 설명합니다. Ingress, 로드 밸런싱 운영 모범 사례 및 네트워크 정책에 맞게 Cilium을 구성하는 방법은 Cilium Ingress 및 Cilium Gateway 개요, Service 유형 LoadBalancer 및 하이브리드 노드에 대한 Kubernetes 네트워크 정책 구성 섹션을 참조하세요.
Cilium은 AWS 클라우드의 노드에서 실행할 때 AWS에서 지원되지 않습니다. Amazon VPC CNI는 하이브리드 노드와 호환되지 않으며 VPC CNI는 eks.amazonaws.com/compute-type: hybrid
레이블에 대한 반선호도로 구성됩니다.
이 페이지에 있었던 Calico 문서는 EKS Hybrid 예시 리포지토리
버전 호환성
Amazon EKS에서 지원되는 모든 Kubernetes 버전에 대해 EKS 하이브리드 노드에 대해 Cilium 버전 v1.17.x
가 지원됩니다.
Amazon EKS에서 지원되는 Kubernetes 버전 목록은 Kubernetes 버전 지원을 참조하세요. EKS Hybrid Nodes는 클라우드 노드가 있는 Amazon EKS 클러스터와 동일한 Kubernetes 버전 지원을 제공합니다.
지원되는 기능
AWS는 오픈 소스 Cilium 프로젝트
AWS는 EKS Hybrid Nodes에서 사용할 수 있는 Cilium의 다음 기능에 대한 기본 구성의 기술 지원을 제공합니다. AWS 지원 범위 외에 기능을 사용하려는 경우 해당 플러그인에 대한 대체 상용 지원을 받거나 Cilium 프로젝트의 문제를 해결하고 프로젝트 수정에 기여할 수 있는 전문 지식을 내부적으로 보유하는 것이 좋습니다.
Cilium 기능 | AWS 지원 |
---|---|
Kubernetes 네트워크 적합성 |
예 |
코어 클러스터 연결 |
예 |
IP 패밀리 |
IPv4 |
수명 주기 관리 |
Helm |
네트워킹 모드 |
VXLAN 캡슐화 |
IP 주소 관리(IPAM) |
Cilium IPAM 클러스터 범위 |
정책 네트워크 |
Kubernetes 네트워크 정책 |
Border Gateway Protocol(BGP) |
Cilium BGP Control Plane |
Kubernetes Ingress |
Cilium Ingress, Cilium Gateway |
Service LoadBalancer IP 할당 |
Cilium Load Balancer IPAM |
Service LoadBalancer IP 주소 알림 |
Cilium BGP Control Plane |
kube-proxy 대체 |
예 |
Cilium 고려 사항
-
Helm 리포지토리 - AWS는 Amazon EKS Cilium/Cilium
의 Amazon Elastic Container Registry Public(Amazon ECR Public)에서 Cilium Helm 차트를 호스팅합니다. helm
명령에서oci://public.ecr.aws/eks/cilium/cilium:1.17.6-0
URI를 사용하여 이 리포지토리를 사용할 수 있습니다. 이 주제의 명령에서는 이 리포지토리를 사용합니다. Amazon ECR Public의 Helm 리포지토리에는 특정helm repo
명령이 유효하지 않으므로 로컬 Helm 리포지토리 이름에서 이 리포지토리를 참조할 수 없습니다. 대신 대부분의 명령에서 전체 URI를 사용합니다. -
기본적으로 Cilium은 캡슐화 방법
으로 VXLAN을 사용하여 오버레이/터널 모드에서 실행되도록 구성됩니다. 이 모드는 기본 물리적 네트워크에 대한 요구 사항이 가장 적습니다. -
기본적으로 Cilium은 클러스터를 떠나는 모든 포드 트래픽의 소스 IP 주소를 노드의 IP 주소로 매스커레이딩
합니다. 매스커레이딩을 비활성화하면 포드 CIDR은 온프레미스 네트워크에서 라우팅 가능해야 합니다. -
하이브리드 노드에서 웹후크를 실행하는 경우 포드 CIDR이 온프레미스 네트워크에서 라우팅 가능해야 합니다. 온프레미스 네트워크에서 포드 CIDR이 라우팅 가능하지 않은 경우 동일한 클러스터의 클라우드 노드에서 웹후크를 실행하는 것이 좋습니다. 자세한 내용은 하이브리드 노드용 웹후크 구성 및 하이브리드 노드용 네트워킹 준비 섹션을 참조하세요.
-
AWS에서는 포드 CIDR이 온프레미스 네트워크에서 라우팅 가능하도록 Cilium의 내장 BGP 기능을 사용할 것을 권장합니다. 하이브리드 노드에서 Cilium BGP를 구성하는 방법에 대한 자세한 내용은 하이브리드 노드에 대한 Cilium BGP 구성 섹션을 참조하세요.
-
Cilium의 기본 IP Address Management(IPAM)를 Cluster Scope
라고 하며, 여기서 Cilium 연산자는 사용자가 구성한 포드 CIDR을 기반으로 각 노드에 IP 주소를 할당합니다.
하이브리드 노드에 Cilium 설치
절차
-
cilium-values.yaml
이라는 YAML 파일을 생성합니다. 다음 예시에서는 Cilium 에이전트 및 운영자에서eks.amazonaws.com/compute-type: hybrid
레이블에 대한 선호도를 설정하여 하이브리드 노드에서만 실행되도록 Cilium을 구성합니다.-
EKS 클러스터의 원격 포드 네트워크에 대해 구성한 것과 동일한 포드 CIDR로
clusterPoolIpv4PodCIDRList
를 구성합니다. 예를 들어10.100.0.0/24
입니다. Cilium 운영자는 구성된clusterPoolIpv4PodCIDRList
IP 공간 내에서 IP 주소 조각을 할당합니다. 포드 CIDR이 온프레미스 노드 CIDR, VPC CIDR 또는 Kubernetes 서비스 CIDR과 겹치면 안 됩니다. -
노드당 필요한 포드를 기반으로
clusterPoolIpv4MaskSize
를 구성합니다. 예를 들어,25
로 구성하면 노드당 128개 포드의 세그먼트 크기는 /25가 됩니다. -
클러스터에 Cilium을 배포한 후에는
clusterPoolIpv4PodCIDRList
또는clusterPoolIpv4MaskSize
를 변경하지 마세요. 자세한 내용은 Expanding the cluster pool을 참조하세요. -
kube-proxy 대체 모드에서 Cilium을 실행하는 경우 Helm 값에
kubeProxyReplacement: "true"
를 설정하고 Cilium과 동일한 노드에서 실행 중인 기존 kube-proxy 배포가 없는지 확인합니다. -
아래 예시에서는 Cilium이 L7 네트워크 정책 및 수신에 사용하는 Envoy L7(계층 7) 프록시를 비활성화합니다. 자세한 내용은 하이브리드 노드에 대한 Kubernetes 네트워크 정책 구성 및 Cilium Ingress 및 Cilium Gateway 개요(을)를 참조하세요.
-
아래 예시에서는 서비스에 대해 구성한 경우 서비스 트래픽 분산이 올바르게 작동하도록
loadBalancer.serviceTopology
를true
로 구성합니다. 자세한 내용은 서비스 트래픽 분산 구성 섹션을 참조하세요. -
Cilium의 Helm 값 전체 목록은 Cilium 설명서의 Helm reference
를 참조하세요. affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid ipam: mode: cluster-pool operator: clusterPoolIPv4MaskSize:
25
clusterPoolIPv4PodCIDRList: -POD_CIDR
loadBalancer: serviceTopology: true operator: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid unmanagedPodWatcher: restart: false loadBalancer: serviceTopology: true envoy: enabled: false kubeProxyReplacement: "false"
-
-
클러스터에 Cilium을 설치합니다.
-
CILIUM_VERSION
을 Cilium 버전으로 바꿉니다(예:1.17.5
). Cilium 마이너 버전에 대한 최신 패치 버전을 사용하는 것이 좋습니다.helm search repo cilium/cilium --versions
명령을 사용하여 로컬 Helm 리포지토리에서 사용할 수 있는 최신 패치 릴리스를 찾아볼 수 있습니다. -
특정 kubeconfig 파일을 사용하는 경우 Helm 설치 명령과 함께
--kubeconfig
플래그를 사용합니다.helm install cilium oci://public.ecr.aws/eks/cilium/cilium \ --version
CILIUM_VERSION
\ --namespace kube-system \ --values cilium-values.yaml
-
-
다음 명령을 사용하여 Cilium 설치가 성공했는지 확인합니다.
cilium-operator
배포와 각 하이브리드 노드에서 실행 중인cilium-agent
가 표시됩니다. 또한 하이브리드 노드는 이제Ready
상태여야 합니다. 온프레미스 네트워크에 포드 CIDR을 알리도록 Cilium BGP를 구성하는 방법에 대한 자세한 내용은 하이브리드 노드에 대한 Cilium BGP 구성 섹션을 참조하세요.kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE cilium-jjjn8 1/1 Running 0 11m cilium-operator-d4f4d7fcb-sc5xn 1/1 Running 0 11m
kubectl get nodes
NAME STATUS ROLES AGE VERSION mi-04a2cf999b7112233 Ready <none> 19m v1.31.0-eks-a737599
하이브리드 노드에서 Cilium 업그레이드
Cilium 배포를 업그레이드하기 전에 Cilium 업그레이드 설명서
-
명령줄 환경에
helm
CLI를 설치했는지 확인합니다. 설치 지침은 Helm 설명서를 참조하세요. -
Cilium 업그레이드 사전 검사를 실행합니다.
CILIUM_VERSION
을 대상 Cilium 버전으로 바꿉니다. Cilium 마이너 버전에 대한 최신 패치 버전을 실행하는 것이 좋습니다. 지정된 마이너 Cilium 릴리스에 대한 최신 패치 릴리스는 Cilium 설명서의 안정적인 릴리스 섹션에서 확인할 수 있습니다. helm install cilium-preflight oci://public.ecr.aws/eks/cilium/cilium --version CILIUM_VERSION \ --namespace=kube-system \ --set preflight.enabled=true \ --set agent=false \ --set operator.enabled=false
-
cilium-preflight.yaml
을 적용한 후READY
포드 수가 실행 중인 Cilium 포드 수와 동일한지 확인합니다.kubectl get ds -n kube-system | sed -n '1p;/cilium/p'
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE cilium 2 2 2 2 2 <none> 1h20m cilium-pre-flight-check 2 2 2 2 2 <none> 7m15s
-
READY 포드 수가 같으면 Cilium 사전 배포도 READY 1/1로 표시되어야 합니다. READY 0/1이 표시되면 업그레이드를 계속하기 전에 CNP 검증
섹션을 참조하고 배포 관련 문제를 해결합니다. kubectl get deployment -n kube-system cilium-pre-flight-check -w
NAME READY UP-TO-DATE AVAILABLE AGE cilium-pre-flight-check 1/1 1 0 12s
-
사전 배포 삭제
helm uninstall cilium-preflight --namespace kube-system
-
helm upgrade
명령을 실행하기 전에existing-cilium-values.yaml
에서 배포 값을 보존하거나 upgrade 명령을 실행할 때 설정에--set
명령줄 옵션을 사용합니다. 업그레이드 작업은 Cilium ConfigMap을 덮어쓰므로 업그레이드할 때 구성 값을 전달하는 것이 중요합니다.helm get values cilium --namespace kube-system -o yaml > existing-cilium-values.yaml
-
정상적인 클러스터 작업 중에는 모든 Cilium 구성 요소가 동일한 버전을 실행해야 합니다. 다음 단계에서는 모든 구성 요소를 하나의 안정적인 릴리스에서 이후 안정적인 릴리스로 업그레이드하는 방법을 설명합니다. 한 마이너 릴리스에서 다른 마이너 릴리스로 업그레이드할 때는 먼저 기존 Cilium 마이너 버전에 대한 최신 패치 릴리스로 업그레이드하는 것이 좋습니다. 중단을 최소화하려면
upgradeCompatibility
옵션을 이 클러스터에 설치된 초기 Cilium 버전으로 설정해야 합니다.helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium --version
CILIUM_VERSION
\ --namespace kube-system \ --set upgradeCompatibility=1.X
\ -f existing-cilium-values.yaml -
(선택 사항) 문제로 인해 업그레이드를 롤백해야 하는 경우 다음 명령을 실행합니다.
helm history cilium --namespace kube-system helm rollback cilium [REVISION] --namespace kube-system
하이브리드 노드에서 Cilium 삭제
-
다음 명령을 실행하여 클러스터에서 모든 Cilium 구성 요소를 제거합니다. 참고로 CNI를 제거하면 노드 및 포드의 상태에 영향을 미칠 수 있으므로 프로덕션 클러스터에서 수행해서는 안 됩니다.
helm uninstall cilium --namespace kube-system
CNI가 클러스터에서 제거되면 Cilium에서 구성한 인터페이스 및 경로가 기본적으로 제거되지 않습니다. 자세한 내용은 GitHub issue
를 참조하세요. -
온디스크 구성 파일 및 리소스를 정리하려면 표준 구성 디렉터리를 사용하는 경우 GitHub의 Cilium 리포지토리에서
cni-uninstall.sh
스크립트에 표시된 대로 파일을 제거할 수 있습니다. -
클러스터에서 Cilium 사용자 지정 리소스 정의(CRD)를 제거하려면 다음 명령을 실행할 수 있습니다.
kubectl get crds -oname | grep "cilium" | xargs kubectl delete