서비스에 할당할 수 있는 외부 IP 주소 제한 - Amazon EKS

서비스에 할당할 수 있는 외부 IP 주소 제한

Kubernetes 서비스는 클러스터 내부에서 다음을 통해 연결할 수 있습니다.

  • Kubernetes가 자동으로 할당하는 클러스터 IP 주소

  • 서비스 사양에서 externalIPs 속성에 대해 지정하는 모든 IP 주소. 외부 IP 주소는 Kubernetes에서 관리하지 않으며 클러스터 관리자의 책임입니다. externalIPs로 지정된 외부 IP 주소는 클라우드 공급자가 지정하여 LoadBalancer 서비스 유형에 할당되는 외부 IP 주소와 다릅니다.

Kubernetes 서비스에 대한 자세한 내용은 Kubernetes 설명서의 서비스를 참조하세요. 서비스 사양에서 externalIPs에 대해 지정할 수 있는 IP 주소를 제한할 수 있습니다.

  1. cert-manager를 배포하여 Webhook 인증서를 관리합니다. 자세한 내용은 cert-manager 문서를 참조하세요.

    kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml
  2. cert-manager Pods가 실행 중인지 확인하세요.

    kubectl get pods -n cert-manager

    예제 출력은 다음과 같습니다.

    NAME READY STATUS RESTARTS AGE cert-manager-58c8844bb8-nlx7q 1/1 Running 0 15s cert-manager-cainjector-745768f6ff-696h5 1/1 Running 0 15s cert-manager-webhook-67cc76975b-4v4nk 1/1 Running 0 14s
  3. 기존 서비스를 검토하여 주소를 제한하려는 CIDR 블록 내에 포함되지 않은 외부 IP 주소가 할당되지 않았는지 확인합니다.

    kubectl get services -A

    예제 출력은 다음과 같습니다.

    NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cert-manager cert-manager ClusterIP 10.100.102.137 <none> 9402/TCP 20m cert-manager cert-manager-webhook ClusterIP 10.100.6.136 <none> 443/TCP 20m default kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 2d1h externalip-validation-system externalip-validation-webhook-service ClusterIP 10.100.234.179 <none> 443/TCP 16s kube-system kube-dns ClusterIP 10.100.0.10 <none> 53/UDP,53/TCP 2d1h my-namespace my-service ClusterIP 10.100.128.10 192.168.1.1 80/TCP 149m

    값이 액세스를 제한하려는 블록 내에 있지 않은 IP 주소인 경우 블록 내에 포함되도록 주소를 변경하고 서비스를 다시 배포해야 합니다. 예를 들어 이전 출력의 my-service 서비스에는 5단계에서 CIDR 블록 예제 내에 없는 외부 IP 주소가 할당되어 있습니다.

  4. 외부 IP Webhook 매니페스트를 다운로드합니다. 또한 GitHub에서 웹후크의 소스 코드를 볼 수도 있습니다.

    curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/docs/externalip-webhook.yaml
  5. CIDR 블록을 지정합니다. 편집기에서 다운로드한 파일을 열고 다음 행의 시작 부분에 있는 \#을 제거합니다.

    #args: #- --allowed-external-ip-cidrs=10.0.0.0/8

    10.0.0.0/8을 실제 CIDR 블록으로 바꿉니다. 원하는 만큼 블록을 지정할 수 있습니다. 여러 블록을 지정하는 경우 블록 사이에 쉼표를 추가합니다.

  6. 클러스터가 us-west-2 AWS 리전에 없는 경우 파일에서 us-west-2, 602401143452amazonaws.com를 다음 명령으로 바꿉니다. 명령을 실행하기 전에 region-code111122223333Amazon EKS 추가 기능용 Amazon 컨테이너 이미지 레지스트리 보기의 목록에서 AWS 리전 값으로 바꿉니다.

    sed -i.bak -e 's|602401143452|111122223333|' externalip-webhook.yaml sed -i.bak -e 's|us-west-2|region-code|' externalip-webhook.yaml sed -i.bak -e 's|amazonaws.com||' externalip-webhook.yaml
  7. 매니페스트를 클러스터에 적용합니다.

    kubectl apply -f externalip-webhook.yaml

    CIDR 블록 지정 단계에서 지정한 블록에 포함되지 않은 externalIPs의 지정된 IP 주소를 통해 클러스터에 서비스를 배포하려고 시도할 경우 실패합니다.