에 Calico 설치Amazon EKS - Amazon EKS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

에 Calico 설치Amazon EKS

Project Calico는 Kubernetes에 대한 네트워크 정책 엔진입니다. Calico 네트워크 정책 집행을 통해 네트워크 세분화 및 테넌트 격리를 구현할 수 있습니다. 이는 테넌트를 각각 격리해야 하는 다중 테넌트 환경에서 또는 개발, 스테이징 및 프로덕션에 별도의 환경을 생성하고자 하는 경우 유용합니다. 네트워크 정책은 네트워크 수신 및 발신 규칙을 생성할 수 있다는 점에서 AWS 보안 그룹과 유사하지만, 인스턴스를 보안 그룹에 할당하는 대신 포드 선택기 및 레이블을 사용하여 네트워크 정책을 포드에 할당합니다. 다음 절차에서는 Amazon EKS 클러스터의 Linux 노드에 Calico를 설치하는 방법을 보여줍니다. Windows 노드에 Calico를 설치하려면 Windows 컨테이너Amazon EKS에서 Calico 사용을 참조하십시오.

참고
  • Fargate와 함께 Amazon EKS.를 사용하는 경우 Calico가 지원되지 않습니다.

  • Calico는 Calico 외부에서 이미 구현한 기존 규칙보다 우선 순위가 높은 규칙을 iptables 노드의 에 추가합니다. Calico 정책 외부의 iptables 규칙이 Calico에 의해 재정의되지 않도록 하려면 Calico 정책에 기존 규칙을 추가하는 것이 좋습니다.

  • 포드보안 그룹을 사용하는 경우, 브랜치 네트워크 인터페이스의 포드에 대한 트래픽 흐름은 Calico 네트워크 정책 적용의 대상이 아니며 Amazon EC2 보안 그룹 적용으로만 제한됩니다. 이러한 제한을 제거하기 위한 커뮤니티 노력이 진행 중입니다.

Amazon EKS Linux 노드에 Calico를 설치하려면

  1. 클러스터가 있는 리전에 해당하는 옵션을 완료하여 클러스터에 Calico 매니페스트를 적용합니다.

    • 중국(닝샤) 또는 이외의 모든 리전 중국(베이징)– 프로젝트의 aws/amazon-vpc-cni-k8sCalico 매니페스트를 GitHub 적용합니다. 이 매니페스트는 DaemonSets 네임스페이스kube-system에서 를 생성합니다.

      kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/calico.yaml
    • 중국(닝샤) 또는 중국(베이징)

      1. 다음 명령을 사용하여 Calico 매니페스트를 다운로드합니다.

        curl -o calico.yaml https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/calico.yaml
      2. 매니페스트를 수정합니다.

        1. 다운로드한 매니페스트 파일을 확인하고 이미지 이름을 기록해 둡니다. 다음 명령을 사용하여 이미지를 로컬에 다운로드합니다.

          docker pull image:<tag>
        2. 다음 명령을 사용하여 이미지를 중국의 Amazon Elastic Container Registry 리포지토리에 푸시하도록 이미지에 태그를 지정합니다.

          docker tag image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>
        3. 다음 명령을 사용하여 중국 Amazon ECR 리포지토리에 이미지를 푸시합니다.

          docker push image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>
        4. Kubernetes 매니페스트 파일(들)을 업데이트하여 해당 리전의 Amazon ECR 이미지 URL을 참조합니다.

      3. Calico 매니페스트를 적용합니다. 이 매니페스트는 DaemonSets 네임스페이스kube-system에서 를 생성합니다.

        kubectl apply -f calico.yaml
  2. 를 주시kube-systemDaemonSets하고 에서 포드 calico-node 수DaemonSetDESIREDREADY 상태가 될 때까지 기다립니다. 이 경우 Calico가 작동 중입니다.

    kubectl get daemonset calico-node --namespace kube-system

    결과:

    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE calico-node 3 3 3 3 3 <none> 38s

Amazon EKS 클러스터에서 Calico를 삭제하려면

  • Amazon EKS 클러스터에서 Calico 사용을 완료한 경우 다음 명령을 DaemonSet 사용하여 를 삭제할 수 있습니다.

    kubectl delete -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.7.5/config/v1.7/calico.yaml

Stars Policy 데모

이 단원에서는 Project Calico 설명서에서 제공하는 Stars Policy 데모를 살펴봅니다. 데모는 Amazon EKS 클러스터에 프런트엔드, 백엔드 및 클라이언트 서비스를 생성합니다. 데모는 또한 각 서비스 간 이용 가능한 수신 및 발신 경로를 보여주는 관리 GUI를 생성합니다.

네트워크 정책을 생성하기 전에 모든 서비스는 양방향으로 통신할 수 있습니다. 네트워크 정책을 적용하면 클라이언트가 프런트엔드 서비스와만 통신할 수 있으며 백엔드는 프런트엔드로부터의 트래픽만 수락한다는 것을 알 수 있습니다.

Stars Policy 데모를 실행하려면

  1. 프런트엔드, 백엔드, 클라이언트 및 관리 UI 서비스를 적용합니다.

    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml
  2. 모든 포드가 Running 상태가 될 때까지 대기합니다.

    kubectl get pods --all-namespaces --watch
  3. 관리 UI에 연결하려면 로컬 포트 9001을 클러스터를 실행하는 management-ui 서비스로 전달합니다.

    kubectl port-forward service/management-ui -n management-ui 9001
  4. 로컬 시스템에서 브라우저를 열고 http://localhost:9001/.을 가리킵니다. 관리 UI가 표시됩니다. C 노드는 클라이언트 서비스이고, F 노드는 프런트엔드 서비스이며, B 노드는 백엔드 서비스입니다. 각 노드에는 기타 모든 노드에 대한 전체 통신 액세스를 보유합니다(진한 색상의 선으로 표시됨).

    
                        개방형 네트워크 정책
  5. 다음 네트워크 정책을 적용하여 서비스를 각각 격리시킵니다.

    kubectl apply -n stars -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yaml kubectl apply -n client -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yaml
  6. 브라우저를 새로 고칩니다. 관리 UI가 더 이상 노드에 도달하지 않아 UI에 표시되지 않는 것을 확인할 수 있습니다.

  7. 다음 네트워크 정책을 적용하여 관리 UI가 서비스에 액세스하도록 허용합니다.

    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui.yaml kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui-client.yaml
  8. 브라우저를 새로 고칩니다. 관리 UI가 노드에 다시 도달할 수 있지만, 노드가 서로 통신할 수 없음을 확인할 수 있습니다.

    
                        UI 액세스 네트워크 정책
  9. 다음 네트워크 정책을 적용하여 프런트엔드 서비스에서 백엔드 서비스로의 트래픽을 허용합니다.

    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/backend-policy.yaml
  10. 다음 네트워크 정책을 적용하여 client 네임스페이스에서 프런트엔드 서비스로의 트래픽을 허용합니다.

    kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/frontend-policy.yaml
    
                        최종 네트워크 정책
  11. (선택 사항) 데모를 마쳤으면 다음 명령을 사용하여 리소스를 삭제할 수 있습니다.

    kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml

    리소스를 삭제한 후에도 노드에 클러스터의 네트워킹을 예기치 않은 방식으로 방해할 수 있는 iptables 규칙이 있을 수 있습니다. Calico를 제거하는 유일한 방법은 모든 노드를 종료하고 휴지통으로 이동하는 것입니다. 모든 노드를 종료하려면 Auto Scaling 그룹 원하는 수를 0으로 설정한 다음 원하는 수로 백업하거나 노드를 종료하면 됩니다. 노드를 휴지통으로 이동할 수 없는 경우 최후의 수단 절차에 대해서는 Calico 리포지토리의 Disabling and remove CalicoGitHub Policy를 참조하십시오.