GKE 다중 네트워킹을 사용하면 워크로드를 여러 VPC 네트워크에 연결할 수 있습니다. type: LoadBalancer의 Kubernetes 서비스를 사용하여 이러한 다중 네트워크 포드를 내부 또는 외부 클라이언트에 노출할 수 있습니다.
GKE는 지정된 보조 네트워크의 포드로 트래픽을 전송하는 서비스에 대해 Google Cloud L4 부하 분산기를 프로비저닝합니다.
이 문서에서는 GKE가 다중 네트워크 포드에 LoadBalancer 서비스를 구현하는 방법을 설명합니다. 이 문서에서는 기능의 필수 구성, 기능, 제한사항을 다룹니다.
멀티 네트워크 LoadBalancer 서비스 작동 방식
다중 네트워크 워크로드를 노출하려면 type:
LoadBalancer의 Service를 만듭니다. 이 서비스에는 보조 인터페이스의 네트워크를 기반으로 포드를 타겟팅하는 특수 선택기가 포함되어야 합니다. 내부 또는 외부 부하 분산기를 만들지 여부를 지정하는 주석도 추가합니다.
선택기의 networking.gke.io/network 라벨은 네트워크별로 엔드포인트를 필터링합니다. 이렇게 하면 부하 분산기가 지정된 네트워크에 연결된 포드 인터페이스로만 트래픽을 전송합니다.
내부 LoadBalancer 서비스
내부 부하 분산기를 만들려면 서비스 매니페스트에 networking.gke.io/load-balancer-type: "Internal" 주석을 추가합니다. 다음 예시에서는 dmz 네트워크의 포드를 타겟팅하는 내부 부하 분산기를 만드는 서비스를 보여줍니다.
apiVersion: v1
kind: Service
metadata:
name: web-app-internal-lb
namespace: default
annotations:
networking.gke.io/load-balancer-type: "Internal"
spec:
externalTrafficPolicy: Local
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
networking.gke.io/network: dmz
app: web-app
type: LoadBalancer
외부 LoadBalancer 서비스
백엔드 서비스 기반 외부 네트워크 부하 분산기를 만들려면 서비스 매니페스트에 cloud.google.com/l4-rbs: enabled 주석을 추가합니다. 다음 예는 dmz 네트워크에서 포드를 타겟팅하는 외부 부하 분산기를 만드는 서비스를 보여줍니다.
apiVersion: v1
kind: Service
metadata:
name: web-app-external-lb
namespace: default
annotations:
cloud.google.com/l4-rbs: enabled
spec:
externalTrafficPolicy: Local
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
networking.gke.io/network: dmz
app: web-app
type: LoadBalancer
포드 및 네트워크 구성
포드에는 LoadBalancer 서비스가 타겟팅하는 네트워크의 인터페이스가 있어야 합니다. 또한 적절한 네트워크 인터페이스의 요청에 올바르게 응답할 수 있도록 포드 내에서 라우팅을 구성해야 합니다.
다음 방법 중 하나로 포드 라우팅을 구성할 수 있습니다.
기본 인터페이스 설정: 포드에서
networking.gke.io/default-interface주석을 사용하여 보조 네트워크 인터페이스를 기본 경로로 설정합니다.정책 기반 라우팅 구성:
NET_ADMIN기능이 있는initContainer를 사용하여 포드 내에서 라우팅 규칙을 구성합니다.
다음 예시는 dmz 네트워크에 인터페이스가 있는 포드의 Deployment 매니페스트를 보여줍니다. networking.gke.io/default-interface 주석은 dmz 인터페이스 (eth1)를 기본 경로로 설정합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
labels:
app: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
annotations:
networking.gke.io/default-interface: 'eth1'
networking.gke.io/interfaces: |-
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName": "eth1","network": "dmz"}
]
spec:
containers:
- name: whereami
image: us-docker.pkg.dev/google-samples/containers/gke/whereami:v1
ports:
- containerPort: 8080
다중 네트워크 엔드포인트 확인
GKE는 전용 컨트롤러 multinet-endpointslice-controller.gke.io를 사용하여 다중 네트워크 서비스의 엔드포인트를 관리합니다. 이 컨트롤러는 다중 네트워크 서비스의 EndpointSlice 객체를 만듭니다. 이러한 EndpointSlice 객체의 IP 주소는 서비스 선택기에 지정된 보조 네트워크에 속합니다.
부하 분산기에 정상 백엔드가 없는 경우 서비스의 EndpointSlice를 검사하여 컨트롤러가 올바른 포드 IP 주소를 선택했는지 확인합니다. EndpointSlice에 엔드포인트가 없으면 서비스 선택기 라벨이 실행 중인 포드와 일치하고 networking.gke.io/network 선택기가 포드의 네트워크와 일치하는지 확인합니다.
제한사항
다중 네트워크 LoadBalancer 서비스에는 다음과 같은 제한사항이 있습니다.
- 내부 부하 분산기에는 GKE 하위 설정이 필요합니다.
- 대상 풀 또는 인스턴스 그룹 기반 부하 분산기는 지원되지 않습니다.
externalTrafficPolicy: Cluster를 사용하는 서비스는 지원되지 않습니다.- 서비스는
hostNetwork포드를 타겟팅할 수 없습니다. - IPv6 및 이중 스택 네트워킹은 지원되지 않습니다.
- 기존 서비스의 네트워크는 변경할 수 없습니다.
- 레이어 3 네트워크만 지원됩니다.
다음 단계
- 멀티 네트워크 서비스 사용자 가이드에 따라 멀티 네트워크 서비스를 배포하는 방법을 알아봅니다.
- VPC를 준비하고 추가 네트워크를 사용하여 GKE 클러스터를 만드는 방법에 대한 자세한 내용은 GKE 멀티 네트워크 사용자 가이드를 참고하세요.