이 페이지에서는 새 클러스터 또는 기존 클러스터에서 앰비언트 네트워킹을 사용 설정하고, 앰비언트 트래픽 리디렉션을 사용 설정하기 위해 네임스페이스와 워크로드를 등록하고, mTLS 및 승인 정책을 구성하는 방법을 보여줍니다.
앰비언트 네트워킹 아키텍처, 이점, 기능에 관한 자세한 내용은 앰비언트 네트워킹 개요를 참고하세요.
전제 조건 및 제한사항
주변 네트워킹을 설정하기 전에 다음 기능 제한사항, 버전 요구사항, 범위 제한사항을 검토하세요.
- GKE 버전: GKE 버전
1.35.2-gke.1842000이상이 필요합니다. - 리전 지원: 클러스터는 리전 Cloud Service Mesh에서 지원하는 리전에 만들어야 합니다.
- 워크로드 상호 운용성: 앰비언트 네트워킹에 등록된 워크로드는 비공개 미리보기에서 사이드카가 삽입된 워크로드 또는 프록시리스 gRPC와 상호 운용할 수 없습니다.
- 지원되지 않는 기능:
- Kubernetes 서비스
trafficDistribution필드 - 헤드리스 서비스
- GKE Sandbox (gVisor)
- Kubernetes 서비스
- 보안 공지: 노드에서
gke-ambient-nriplugin구성요소를 사용할 수 없게 되면 인바운드 트래픽 인증 및 승인 시행이 우회될 수 있습니다.
시작하기 전에
Google Cloud에서 다음 기본 요건 설정 단계를 완료합니다.
- 프로젝트를 만들거나 선택합니다.
필요한 API를 사용 설정합니다.
gcloud services enable \ privateca.googleapis.com \ gkehub.googleapis.com \ compute.googleapis.com \ container.googleapis.com \ trafficdirector.googleapis.com \ networkservices.googleapis.com \ networksecurity.googleapis.com \ telemetry.googleapis.com \ monitoring.googleapis.com \ logging.googleapis.com
새 클러스터에서 앰비언트 네트워킹 사용 설정
다음 명령어를 실행하여 주변 네트워킹이 사용 설정된 새 GKE 클러스터를 만듭니다.
앰비언트 네트워킹이 사용 설정된 GKE 클러스터 만들기
gcloud beta container clusters create CLUSTER_NAME \ --machine-type=e2-standard-4 \ --enable-ambient-networking \ --enable-dataplane-v2 \ --enable-fleet \ --gateway-api=standard \ --location=CLUSTER_LOCATION \ --release-channel=rapid \ --workload-pool=PROJECT_ID.svc.id.goog이제
gke-managed-ambient네임스페이스에서 두 개의 DaemonSet이 실행됩니다.
기존 클러스터에서 앰비언트 네트워킹 사용 설정
기존 GKE 클러스터에서 앰비언트 메시를 사용 설정하려면 다음 단계를 따르세요.
클러스터가 다음 요구사항을 충족하는지 확인합니다.
- 버전 1.35.2-gke.1842000 이상
- GKE Dataplane V2가 사용 설정되어 있습니다.
- 머신 유형은 e2-standard-4 이상이어야 합니다.
- 클러스터를 Fleet에 추가해야 합니다.
- 클러스터에 Gateway API와 워크로드 아이덴티티가 사용 설정되어 있어야 합니다.
기존 클러스터에서 앰비언트 네트워킹을 사용 설정합니다.
gcloud beta container clusters update CLUSTER_NAME \ --enable-ambient-networking \ --location=CLUSTER_LOCATION \ --enable-fleet이제
gke-managed-ambient네임스페이스에서 두 개의 DaemonSet이 실행됩니다.확인하려면 CLI를 클러스터로 지정하세요.
gcloud beta container clusters get-credentials CLUSTER_NAME \ --location=CLUSTER_LOCATIONgke-managed-ambient네임스페이스에서 daemonset을 가져옵니다.kubectl get daemonset -n gke-managed-ambient출력은 다음과 비슷합니다.
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE AGE gke-ambient-nriplugin 9 9 9 9 9 4d1h gke-ambient-proxy 9 9 9 9 9 4d1h
앰비언트 네트워킹을 위해 네임스페이스 등록
다음 단계에 따라 샘플 애플리케이션을 배포하고 네임스페이스에서 앰비언트 트래픽 리디렉션을 사용 설정하세요.
샘플 애플리케이션을 배포합니다.
kubectl apply -f - <<EOF apiVersion: v1 kind: Namespace metadata: name: ambient-test --- apiVersion: v1 kind: ServiceAccount metadata: name: client namespace: ambient-test --- apiVersion: v1 kind: ServiceAccount metadata: name: server namespace: ambient-test --- apiVersion: v1 kind: Service metadata: name: server namespace: ambient-test labels: app: server spec: ports: - port: 80 protocol: TCP selector: app: server --- apiVersion: apps/v1 kind: Deployment metadata: name: client namespace: ambient-test labels: app: client spec: replicas: 1 selector: matchLabels: app: client template: metadata: labels: app: client spec: serviceAccountName: client containers: - name: nginx image: nginx:1.29.6 --- apiVersion: apps/v1 kind: Deployment metadata: name: server namespace: ambient-test labels: app: server spec: replicas: 2 selector: matchLabels: app: server template: metadata: labels: app: server spec: serviceAccountName: server containers: - name: nginx image: nginx:1.29.6 readinessProbe: httpGet: path: / port: 80 EOFGKE 앰비언트 프록시를 통해 트래픽 리디렉션을 사용 설정하도록
ambient-test네임스페이스에 라벨을 지정합니다.kubectl label namespace ambient-test networking.gke.io/dataplane-mode=ambient네임스페이스의 개별 포드가 트래픽 리디렉션에 대해 구성되었는지 확인합니다.
kubectl get pods -n ambient-test -o yaml | grep redirection출력은 다음과 비슷합니다.
ambient.networking.gke.io/redirection: enabled ambient.networking.gke.io/redirection: enabled클라이언트-서버 트래픽을 테스트합니다.
kubectl exec -it deploy/client -n ambient-test -- \ /bin/curl -fsLS server.ambient-test.svc.cluster.local일반 텍스트 트래픽이
gke-ambient-proxy를 통해 흐르는지 확인하려면 로그 탐색기에서 액세스 로그를 확인하고gke-ambient-node-proxy-accesslog를 검색하세요.선택적으로 네임스페이스의 워크로드에 대해 레이어 4 측정항목 생성을 사용 설정합니다.
kubectl label namespace ambient-test networking.gke.io/ambient-network-metrics=enabled사용 설정하면 네트워크 서비스 모니터링을 통해 Cloud Monitoring에서 워크로드 측정항목을 사용할 수 있습니다.
서비스에 mTLS 사용 설정
네임스페이스의 워크로드에 트래픽 리디렉션을 사용 설정한 후 암호화, 인증, 승인을 적용하는 정책을 적용합니다.
서버 측 워크로드에서 허용적인 mTLS 정책을 구성합니다.
kubectl apply -f - <<EOF apiVersion: networking.gke.io/v1 kind: GCPServerTLSPolicy metadata: name: server namespace: ambient-test spec: mtlsMode: Permissive targetRefs: - group: "" kind: Pod selector: matchLabels: app: server EOF이 정책을 사용하면 포드가 mTLS 트래픽과 일반 텍스트 트래픽을 모두 수락합니다. 관대한 mTLS는 트래픽 스니핑을 사용하여 트래픽이 mTLS인지 일반 텍스트인지 감지합니다. 이렇게 하면 자체 TLS 또는 MySQL과 같은 '서버가 먼저 말하는' 프로토콜을 사용하는 애플리케이션 트래픽이 중단됩니다.
정책이 컨트롤러에 의해 수락되었는지 확인합니다.
kubectl describe gcpservertlspolicies -n ambient-test server | grep -A50 Status출력은 다음과 비슷합니다.
[...] Conditions: Last Transition Time: 2026-03-25T17:47:30Z Message: Reason: Accepted Status: True Type: Accepted Controller Name: networking.gke.io/dpv2-1n Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Sync 108s (x2 over 2m20s) sc-dpv2-1n-controller Sync on Mesh dpv2-1n-fqtx-mesh succeeded정책 전파는 컨트롤러 수락 후 최대 3분이 걸릴 수 있습니다. 3분 정도 기다린 후 진행합니다.
서비스를 타겟팅하는 클라이언트 측 mTLS 정책을 구성합니다.
kubectl apply -f - <<EOF apiVersion: networking.gke.io/v1 kind: GCPClientTLSPolicy metadata: name: server-mtls namespace: ambient-test spec: targetRefs: - group: "" kind: Service name: server subjectAltNames: - uri: spiffe://PROJECT_ID.svc.id.goog/ns/ambient-test/sa/server EOF이 정책은 등록된 클라이언트가 서버 서비스로 mTLS 트래픽을 시작하도록 구성합니다. 다음 단계로 진행하기 전에 최소 2분 정도 기다려야 할 수 있습니다.
정책이 컨트롤러에 의해 수락되었는지 확인합니다.
kubectl describe gcpclienttlspolicies -n ambient-test server-mtls | grep -A50 Status출력은 다음과 비슷합니다.
[...] Status: Conditions: Last Transition Time: 2024-10-13T01:15:03Z Message: Observed Generation: 1 Reason: Accepted Status: True Type: Accepted클라이언트-서버 트래픽을 테스트합니다.
kubectl exec -it deploy/client -n ambient-test -- \ /bin/curl -fsLS server.ambient-test.svc.cluster.local이제 앰비언트 네트워킹에 등록된 포드에서 ambient-test 네임스페이스의 서버 서비스로 전달되는 트래픽이 mTLS를 사용해야 합니다.
연결에서 mTLS를 사용하는지 확인하려면 로그 탐색기에서 액세스 로그를 확인하고 맞춤 로그 이름을 검색하세요.
워크로드 포드가 더 이상 일반 텍스트 트래픽을 수락하지 않도록 서버 서비스에서
mode을 관대에서 엄격으로 변경하여 기존 GCPServerTLSPolicy를 업데이트합니다.kubectl apply -f - <<EOF apiVersion: networking.gke.io/v1 kind: GCPServerTLSPolicy metadata: name: server namespace: ambient-test spec: mtlsMode: Strict targetRefs: - group: "" kind: Pod selector: matchLabels: app: server EOF정책이 수락되었는지 확인합니다.
kubectl describe gcpservertlspolicies -n ambient-test server | grep -A50 Status출력은 다음과 비슷합니다.
Name: server <...> UID: e4f2a7a3-69aa-4528-8ea6-6f1bf2142011 Spec: Mtls Mode: Strict Target Refs: Group: Kind: Pod Selector: Match Labels: App: server Status: Ancestors: Ancestor Ref: Group: Kind: Pod Name: app=server Conditions: Last Transition Time: 2026-03-25T22:33:54Z Message: Reason: Accepted Status: True Type: Accepted Controller Name: networking.gke.io/dpv2-1n Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Sync 43s (x5 over 4m57s) sc-dpv2-1n-controller Sync on Mesh dpv2-1n-2cdi-mesh succeeded이제 서버 서비스로 전송되는 모든 일반 텍스트 트래픽이 거부됩니다.
일반 텍스트 트래픽이 이제 거부되는지 확인하려면 주변 네트워크에 등록되지 않은 클라이언트에서 서버 서비스로 트래픽을 전송하세요.
kubectl create namespace noambient-test && \ kubectl run -it -n noambient-test --rm curl --image=nginx -- \ /bin/curl -fsLSv http://server.ambient-test.svc.cluster.local이 연결은 다음과 유사한 메시지와 함께 실패해야 합니다.
* Request completely sent off * Empty reply from server * shutting down connection #0 curl: (52) Empty reply from server
레이어 4 승인 정책 설정
ID 기반 승인을 적용하려면 워크로드 소유자가 정책 선택기에 포드 라벨을 지정합니다. 네임스페이스 소유자는 선택기 없이 네임스페이스 전체에 정책을 적용합니다.
클라이언트만 서버와 통신할 수 있도록 다음 정책을 적용합니다.
kubectl apply -f - <<EOF apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: allow-client namespace: ambient-test spec: action: ALLOW enforcementLevel: L4 targetRefs: - group: "" kind: Pod selector: matchLabels: app: server rules: - from: sources: - principals: - principalSelector: CLIENT_CERT_URI_SAN principal: type: Exact value: spiffe://PROJECT_ID.svc.id.goog/ns/ambient-test/sa/client EOF이 정책은
ambient-test네임스페이스의 서버 포드로 향하는 트래픽에 적용됩니다. 트래픽은 SPIFFE ID가 spiffe://PROJECT_ID.svc.id.goog/ns/ambient-test/sa/client인 소스에서만 허용됩니다.클라이언트 서비스 계정에서 샘플 요청을 전송하여 정책 시행이 허용되는지 확인합니다.
kubectl exec -it deploy/client -n ambient-test -- \ /bin/curl -fsLS server.ambient-test.svc.cluster.local서버 서비스 계정에서 샘플 요청을 전송하여 정책 시행이 허용되지 않음을 확인합니다.
kubectl exec -it deploy/server -n ambient-test -- \ /bin/curl -fsLS server.ambient-test.svc.cluster.local출력은 다음과 비슷합니다.
curl: (52) Empty reply from server command terminated with exit code 52로그 탐색기를 사용하여 승인 시행 로깅을 확인할 수 있습니다. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.