이 페이지에서는 GKE가 LoadBalancer 서비스에 대해 만드는 인그레스 허용 VPC 방화벽 규칙을 사용 중지하는 방법을 설명합니다.
LoadBalancer 서비스에 대해 자동으로 생성된 이러한 방화벽 규칙을 사용 중지하면 다음과 같은 경우에 유용할 수 있습니다.
- 두 개 이상의 GKE 클러스터에 LoadBalancer 서비스가 여러 개 있는 경우 방화벽 규칙을 직접 관리하는 것이 더 효율적일 수 있습니다. 예를 들어 GKE가 각 LoadBalancer 서비스에 고유한 방화벽 규칙을 만드는 대신 수동으로 만든 방화벽 규칙을 사용하여 여러 LoadBalancer 서비스의 인바운드 트래픽을 허용할 수 있습니다.
- VPC 방화벽 규칙 대신 계층식 방화벽 정책, 전역 네트워크 방화벽 정책 또는 리전 네트워크 방화벽 정책을 사용할 수 있습니다. 이러한 방화벽 정책의 규칙은 추가 작업, 더 유연한 타겟, 위치정보, 위협 인텔리전스, 주소 그룹, FQDN과 같은 기능을 지원합니다.
LoadBalancer 서비스에 대해 자동으로 생성된 방화벽 규칙을 사용 중지하려면 클러스터를 만들거나 업데이트할 때 --disable-l4-lb-firewall-reconciliation
플래그를 지정해야 합니다. --disable-l4-lb-firewall-reconciliation
플래그는 노드 간 통신을 용이하게 하는 규칙이나 서비스의 상태 확인을 허용하는 규칙과 같이 자동으로 생성된 다른 VPC 방화벽 규칙에는 영향을 미치지 않습니다.
요구사항
- LoadBalancer 서비스에 사용자 관리 방화벽 규칙을 사용하려면 GKE 클러스터에서 버전 1.31.3-gke.105600 이상을 사용해야 합니다.
제한사항
GKE는 다음 유형의 LoadBalancer 서비스에 대한 방화벽 규칙 자동 생성 사용 중지를 지원합니다.
다음 유형의 LoadBalancer 서비스에는 방화벽 규칙 자동 생성을 사용 중지할 수 없습니다.
- GKE 하위 설정을 사용하지 않는 내부 LoadBalancer 서비스
- 대상 풀 기반 외부 LoadBalancer 서비스
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
수동 방화벽 규칙 관리 전략
GKE 클러스터에서 LoadBalancer 서비스에 대한 VPC 방화벽 규칙의 자동 생성을 사용 중지하기 전에 보안 관리자와 협력하여 방화벽 규칙을 수동으로 구성하기 위한 전략을 수립하세요.
계층식 방화벽 정책, 전역 네트워크 방화벽 정책 또는 리전 네트워크 방화벽 정책 중 사용할 방화벽 정책 유형을 결정합니다. 방화벽 정책을 만드는 단계는 다음을 참고하세요.
정책을 사용하지 않는 VPC 방화벽 규칙을 사용할 수도 있습니다.
묵시적 수신 거부 방화벽 규칙이 수신 트래픽을 금지하므로 수동으로 만든 방화벽 규칙은 수신 허용 규칙이어야 합니다. VPC 방화벽 규칙의 자동 생성을 사용 중지한 경우 LoadBalancer 서비스의 트래픽과 일치하는 인그레스 허용 방화벽 규칙을 만들지 않으면 수신 트래픽이 노드에 도달하지 않습니다.
방화벽 규칙의 매개변수에 따라 하나의 인그레스 허용 방화벽 규칙이 하나 이상의 LoadBalancer 서비스에 적용될 수 있습니다. 만드는 각 인그레스 허용 방화벽 규칙에 대해 다음 매개변수를 정의합니다.
타겟 매개변수: 방화벽 규칙에 LoadBalancer 서비스가 포함된 클러스터의 모든 노드가 포함되어 있는지 확인합니다. 지원되는 대상은 규칙이 있는 방화벽 정책의 유형 또는 VPC 방화벽 규칙을 사용하는지에 따라 다릅니다. 방화벽 정책의 규칙 타겟 매개변수에 대한 자세한 내용은 타겟을 참고하세요.
프로토콜 및 포트: 방화벽 규칙을 적용해야 하는 LoadBalancer 서비스에서 사용하는 모든 프로토콜 및 대상 포트를 포함합니다.
대상 매개변수: 대상 매개변수에 다음 전략 중 하나를 사용할 수 있습니다.
- 방화벽 규칙이 적용되어야 하는 모든 LoadBalancer 서비스의 IP 주소를 대상 매개변수에 포함합니다. LoadBalancer 서비스의 IP 주소를 찾으려면 다음 명령어를 사용합니다.
kubectl get svc LOADBALANCER_NAME \ -n NAMESPACE_NAME \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}
- 대상 매개변수를 생략할 수 있습니다. 대상 매개변수를 생략하면 대상 매개변수가 대상을 암시적으로 정의합니다. 자세한 내용은 인그레스 규칙의 대상 및 IP 주소를 참고하세요.
소스 매개변수: 방화벽 규칙을 적용해야 하는 부하 분산기 서비스에 연결해야 하는 클라이언트에서 사용하는 소스 (예: IP 주소)를 지정합니다.
방화벽 규칙을 만드는 단계는 다음을 참고하세요.
수동으로 만든 방화벽 규칙이 올바르게 작동하는지 확인하려면 Network Intelligence Center (NIC) 연결 테스트를 실행합니다. 연결 테스트를 실행할 때:
- 대상을 LoadBalancer 서비스의 IP 주소로 설정합니다.
- 소스를 클라이언트의 IP 주소로 설정합니다.
자세한 내용은 연결 문제 해결을 참고하세요.
LoadBalancer 서비스에 대한 VPC 방화벽 규칙 생성 사용 중지
이 섹션에서는 LoadBalancer 서비스에 대한 VPC 방화벽 규칙의 자동 생성을 사용 중지하는 단계를 설명합니다.
VPC 방화벽 규칙 생성이 사용 중지된 새 GKE 클러스터 만들기
새로 만든 클러스터에서 LoadBalancer 서비스에 대해 자동으로 생성된 VPC 방화벽 규칙을 사용 중지하려면
--disable-l4-lb-firewall-reconciliation
플래그를 사용하여 클러스터를 만듭니다.Autopilot:
gcloud container clusters create-auto CLUSTER_NAME \ --disable-l4-lb-firewall-reconciliation \ --cluster-version=VERSION
표준:
gcloud container clusters create CLUSTER_NAME \ --disable-l4-lb-firewall-reconciliation \ --enable-l4-ilb-subsetting \ --cluster-version=VERSION
다음을 바꿉니다.
CLUSTER_NAME
: 새 클러스터의 이름VERSION
: GKE 버전입니다.
외부 또는 내부 LoadBalancer 서비스를 만듭니다.
GKE가 LoadBalancer 서비스에 대한 인그레스 허용 방화벽 규칙을 만들지 않는지 확인합니다. 자동으로 생성된 인그레스 허용 방화벽 규칙의 이름은
k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]
형식입니다.다음 명령어는
k8s2
가 포함된 방화벽 규칙 목록을 반환합니다.gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
externalTrafficPolicy
매개변수가Local
로 설정된 경우 응답은k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw
형식의 상태 확인 방화벽 규칙만 반환해야 합니다.spec.healthCheckNodePort
매개변수로 정의된 TCP 포트를 사용합니다. 지정되지 않은 경우 Kubernetes 제어 영역은 노드 포트 범위에서 상태 점검 포트를 할당합니다.k8s2-rkdld6go-default-ilb-svc-dluvsefq-fw default INGRESS 1000 tcp:30868 False
externalTrafficPolicy
매개변수가Cluster
로 설정된 경우 다음 상태 확인 방화벽 규칙이 대신 반환됩니다.k8s2-rkdld6go-l4-shared-hc-fw default INGRESS 1000 tcp:10256 False
GKE 서비스에 생성된 방화벽 규칙에 관한 자세한 내용은 자동으로 생성되는 방화벽 규칙을 참고하세요.
VPC 방화벽 규칙 생성을 사용 중지하도록 기존 GKE 클러스터 업데이트
VPC 방화벽 규칙 생성을 사용 중지하기 전에 기존 클러스터 업데이트에 관한 다음 사항에 유의하세요.
- VPC 방화벽 규칙 생성을 사용 중지하도록 기존 클러스터를 업데이트해도 GKE는 LoadBalancer 서비스에 대해 GKE가 자동으로 만든 기존 방화벽 규칙을 삭제하지 않습니다.
- GKE는 기존 규칙의 업데이트를 중지하고 새 LoadBalancer 서비스에 대한 새 규칙을 만들지 않습니다.
- VPC 방화벽 규칙 생성을 다시 사용 설정하려면
gcloud_name container clusters update
명령어와 함께--enable-l4-lb-firewall-reconciliation
플래그를 사용하면 됩니다.
기존 클러스터에서 자동 방화벽 규칙 생성을 사용 중지하려면 다음 단계를 따르세요.
LoadBalancer 서비스의 방화벽 규칙 자동 생성 및 관리를 사용 중지하도록 클러스터를 업데이트합니다.
gcloud container clusters update CLUSTER_NAME \ --disable-l4-lb-firewall-reconciliation \ --cluster-version=supported_version
다음을 바꿉니다.
CLUSTER_NAME
: 새 클러스터의 이름VERSION
: GKE 버전입니다.
외부 또는 내부 LoadBalancer 서비스를 만듭니다.
GKE가 LoadBalancer 서비스에 대해 인그레스 허용 방화벽 규칙을 만들지 않는지 확인합니다. 자동으로 생성된 인그레스 허용 방화벽 규칙의 이름은
k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]
형식입니다.다음 명령어는
k8s2
가 포함된 방화벽 규칙 목록을 반환합니다.gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
externalTrafficPolicy
매개변수가Local
로 설정된 경우 응답은k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw
형식의 상태 확인 방화벽 규칙만 반환해야 합니다.spec.healthCheckNodePort
매개변수로 정의된 TCP 포트를 사용합니다. 지정되지 않은 경우 Kubernetes 제어 영역은 노드 포트 범위에서 상태 점검 포트를 할당합니다.k8s2-rkdld6go-default-ilb-svc-dluvsefq-fw default INGRESS 1000 tcp:30868 False
externalTrafficPolicy
매개변수가Cluster
로 설정된 경우 다음 상태 확인 방화벽 규칙이 대신 반환됩니다.k8s2-rkdld6go-l4-shared-hc-fw default INGRESS 1000 tcp:10256 False
GKE 서비스에 생성된 방화벽 규칙에 관한 자세한 내용은 자동으로 생성되는 방화벽 규칙을 참고하세요.
연결 문제 해결하기
다음 예는 Network Intelligence Center 연결 테스트를 사용하여 외부 LoadBalancer Service:cluster에 대한 연결을 테스트하는 방법을 보여줍니다.
Network Intelligence Center:
- Google Cloud 콘솔에서 Network Intelligence Center로 이동하여 새 연결 테스트를 시작합니다.
- 드롭다운 메뉴에서 소스로 모든 외부 공개 IP 주소를 선택하고 대상에서 로드 밸런서를 선택합니다.
- 연결 테스트를 다시 실행합니다.
gcloud CLI:
다음 명령어 예에서는 로컬 워크스테이션의 공개 IP 주소를 소스로, 외부 부하 분산기의 외부 IP 주소를 대상으로 테스트를 만들고 실행합니다.
gcloud network-management connectivity-tests create TEST_NAME \ --source-ip-address=SOURCE_IP_ADDRESS \ --source-network-type=NON_GCP_NETWORK \ --destination-ip-address=$(kubectl get svc LOADBALANCER_NAME -o jsonpath='{.status.loadBalancer.ingress[0].ip}') \ --destination-port=$(kubectl get svc LOADBALANCER_NAME -o jsonpath='{.spec.ports[0].targetPort}') \ --destination-network=projects/PROJECT_ID/global/networks/NETWORK_NAME
다음을 바꿉니다.
TEST_NAME
: 연결 테스트의 이름입니다.SOURCE_IP_ADDRESS
: 외부 LoadBalancer 서비스에 연결해야 하는 시스템의 IP 주소입니다. 예를 들면 다음과 같습니다.LOADBALANCER_NAME
: 외부 LoadBalancer 서비스의 이름입니다.PROJECT_ID
: 클러스터의 VPC 네트워크가 포함된 프로젝트의 프로젝트 ID입니다. 클러스터에서 공유 VPC 네트워크를 사용하는 경우 호스트 프로젝트의 프로젝트 ID를 사용합니다.NETWORK_NAME
: 클러스터의 VPC 네트워크 이름입니다.
테스트 결과를 확인합니다.
gcloud network-management connectivity-tests describe TEST_NAME
다음 단계
- 방화벽 정책에 대해 자세히 알아보세요.
- GKE에서 기본적으로 자동으로 생성하는 인그레스 허용 VPC 방화벽 규칙에 관한 개요는 자동으로 생성된 방화벽 규칙을 참고하세요.
- LoadBalancer 서비스의 매개변수에 관한 설명은 LoadBalancer 서비스 매개변수를 참고하세요.
- Google Cloud의 기타 자동 입력 방화벽 규칙 알아보기
- 공유 VPC를 사용하는 프로젝트에서 방화벽 규칙 만들기에 대해 자세히 알아보기