서비스에 할당할 수 있는 외부 IP 주소 제한
Kubernetes 서비스는 클러스터 내부에서 다음을 통해 연결할 수 있습니다.
-
Kubernetes가 자동으로 할당하는 클러스터 IP 주소
-
서비스 사양에서
externalIPs
속성에 대해 지정하는 모든 IP 주소. 외부 IP 주소는 Kubernetes에서 관리하지 않으며 클러스터 관리자의 책임입니다.externalIPs
로 지정된 외부 IP 주소는 클라우드 공급자가 지정하여LoadBalancer
서비스 유형에 할당되는 외부 IP 주소와 다릅니다.
Kubernetes 서비스에 대한 자세한 내용은 Kubernetes 설명서의 서비스externalIPs
에 대해 지정할 수 있는 IP 주소를 제한할 수 있습니다.
-
cert-manager
를 배포하여 Webhook 인증서를 관리합니다. 자세한 내용은 cert-manager문서를 참조하세요. kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml
-
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
-
기존 서비스를 검토하여 주소를 제한하려는 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 주소가 할당되어 있습니다. -
외부 IP Webhook 매니페스트를 다운로드합니다. 또한 GitHub에서 웹후크의 소스 코드
를 볼 수도 있습니다. curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/docs/externalip-webhook.yaml
-
CIDR 블록을 지정합니다. 편집기에서 다운로드한 파일을 열고 다음 행의 시작 부분에 있는
\#
을 제거합니다.#args: #- --allowed-external-ip-cidrs=10.0.0.0/8
10.0.0.0/8
을 실제 CIDR 블록으로 바꿉니다. 원하는 만큼 블록을 지정할 수 있습니다. 여러 블록을 지정하는 경우 블록 사이에 쉼표를 추가합니다. -
클러스터가
us-west-2
AWS 리전에 없는 경우 파일에서us-west-2
,602401143452
및amazonaws.com
를 다음 명령으로 바꿉니다. 명령을 실행하기 전에region-code
및111122223333
을 Amazon 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
-
매니페스트를 클러스터에 적용합니다.
kubectl apply -f externalip-webhook.yaml
CIDR 블록 지정 단계에서 지정한 블록에 포함되지 않은
externalIPs
의 지정된 IP 주소를 통해 클러스터에 서비스를 배포하려고 시도할 경우 실패합니다.