이 페이지에서는 서브네트워크, BGP 피어링 세션, 부하 분산을 비롯한 Google Distributed Cloud의 네트워킹 기능을 설명합니다.
Distributed Cloud Edge Network API 사용 설정
Distributed Cloud 네트워킹을 구성하려면 먼저 Distributed Cloud Edge Network API를 사용 설정해야 합니다. 이렇게 하려면 이 섹션의 단계를 완료하세요.
콘솔
Google Cloud 콘솔에서 Distributed Cloud Edge Network API 페이지로 이동합니다.
사용 설정을 클릭합니다.
gcloud
다음 명령어를 사용하세요.
gcloud services enable edgenetwork.googleapis.com
Distributed Cloud 네트워킹 구성
이 섹션에서는 Distributed Cloud 네트워킹 구성요소를 구성하는 방법을 설명합니다.
Distributed Cloud의 일반적인 네트워크 구성은 다음 단계로 구성됩니다.
선택사항: 필요한 경우 타겟 영역의 네트워크 구성을 초기화합니다.
네트워크를 만듭니다.
네트워크 내에 서브네트워크를 하나 이상 만듭니다.
해당 상호 연결 연결을 사용하여 PE 라우터와 북바운드 BGP 피어링 세션을 설정합니다.
해당 서브넷을 사용하여 워크로드를 실행하는 포드와 하위 BGP 피어링 세션을 설정합니다.
선택사항: 고가용성을 위해 루프백 BGP 피어링 세션을 설정합니다.
구성을 테스트합니다.
포드를 네트워크에 연결합니다.
선택사항: Distributed Cloud 영역의 네트워크 구성 초기화
다음 경우에는 Distributed Cloud zone의 네트워크 구성을 초기화해야 합니다.
- 온프레미스에 Distributed Cloud 하드웨어가 설치된 직후
- 기존 Distributed Cloud 배포에서 Distributed Cloud 버전 1.3.0 이상으로 업그레이드했지만 Distributed Cloud Edge Network API의 비공개 미리보기에 참여하지 않았습니다.
영역의 네트워크 구성을 초기화하면 default라는 기본 라우터와 default라는 기본 네트워크가 생성됩니다. 또한 Distributed Cloud 하드웨어를 주문할 때 요청한 모든 Interconnect와 피어링하도록 default 라우터를 구성합니다. 이는 해당 Interconnect 연결을 만들어 수행됩니다. 이 구성은 분산 클라우드 배포에 로컬 네트워크로의 기본 업링크 연결을 제공합니다.
영역의 네트워크 구성을 초기화하는 것은 일회성 절차입니다. 전체 안내는 영역의 네트워크 구성 초기화를 참고하세요.
네트워크 만들기
새 네트워크를 만들려면 네트워크 만들기의 안내를 따르세요. Distributed Cloud 노드가 네트워크에 연결되도록 네트워크 내에 하나 이상의 서브넷도 만들어야 합니다.
하나 이상의 서브네트워크 만들기
서브네트워크를 만들려면 서브네트워크 만들기의 안내를 따르세요. 노드가 네트워크에 액세스할 수 있도록 네트워크에 하나 이상의 서브네트워크를 만들어야 합니다. 생성한 각 서브네트워크에 해당하는 VLAN은 영역의 모든 노드에서 자동으로 사용할 수 있습니다.
북쪽 BGP 피어링 세션 설정
네트워크와 해당 서브네트워크를 만들면 Distributed Cloud 영역에 로컬로 생성됩니다. 아웃바운드 연결을 사용 설정하려면 네트워크와 피어링 에지 라우터 간에 하나 이상의 북바운드 BGP 피어링 세션을 설정해야 합니다.
업스트림 BGP 피어링 세션을 설정하려면 다음 단계를 따르세요.
영역에서 사용 가능한 상호 연결을 나열한 다음 이 피어링 세션의 대상 상호 연결을 선택합니다.
선택한 Interconnect에서 하나 이상의 Interconnect 연결을 만듭니다. 상호 연결 연결은 다음 단계에서 만드는 라우터를 선택한 상호 연결에 연결합니다.
라우터를 만듭니다. 이 라우터는 이전 단계에서 만든 상호 연결 연결을 사용하여 상호 연결과 네트워크 간에 트래픽을 라우팅합니다.
이 절차의 앞부분에서 만든 각 Interconnect 연결에 대해 라우터에 인터페이스를 추가합니다. 각 인터페이스에 대해 Distributed Cloud 랙에 있는 해당 ToR (Top-of-Rack) 스위치의 IP 주소를 사용합니다. 자세한 내용은 북바운드 피어링 세션 설정을 참고하세요.
이전 단계에서 라우터에 만든 각 인터페이스의 피어를 추가합니다.
다운스트림 BGP 피어링 세션 설정
로컬 네트워크에서 워크로드로의 인바운드 연결을 사용 설정하려면 피어링 에지 라우터와 포드가 속한 서브넷 간에 하나 이상의 다운스트림 BGP 피어링 세션을 설정해야 합니다. 각 서브네트워크의 게이트웨이 IP 주소는 분산 클라우드 랙에 있는 해당 ToR 스위치의 IP 주소입니다.
다운스트림 BGP 피어링 세션을 설정하려면 다음 단계를 따르세요.
인바운드 연결을 프로비저닝하려는 각 서브네트워크에 대해 타겟 네트워크의 라우터에 인터페이스를 추가합니다. 자세한 내용은 다운스트림 피어링 세션 설정을 참고하세요.
이전 단계에서 라우터에 만든 각 인터페이스에 대해 피어를 추가합니다.
선택사항: 루프백 BGP 피어링 세션 설정
워크로드와 로컬 네트워크 간에 고가용성 연결을 사용 설정하려면 대상 포드와 Distributed Cloud 랙의 ToR 스위치 간에 루프백 BGP 피어링 세션을 설정하면 됩니다. 루프백 피어링 세션은 포드에 대해 두 개의 독립적인 피어링 세션을 설정합니다. 각 세션은 ToR 스위치 하나와 연결됩니다.
루프백 BGP 피어링 세션을 설정하려면 다음 단계를 따르세요.
타겟 네트워크의 라우터에 루프백 인터페이스를 추가합니다. 자세한 내용은 루프백 피어링 세션 설정을 참고하세요.
루프백 인터페이스의 피어 추가
구성 테스트
생성한 네트워크 구성요소의 구성을 테스트하려면 다음을 실행하세요.
포드를 네트워크에 연결
포드를 네트워크에 연결하고 고급 네트워크 기능을 구성하려면 네트워크 기능 운영자의 안내를 따르세요.
부하 분산
Distributed Cloud는 Layer 2 모드의 MetalLB를 기반으로 하는 번들 네트워크 부하 분산 솔루션과 함께 제공됩니다. 이 솔루션을 사용하면 다음과 같이 가상 IP 주소 (VIP)를 사용하여 Distributed Cloud 영역에서 실행되는 서비스를 외부 세계에 노출할 수 있습니다.
- 네트워크 관리자는 Distributed Cloud를 주문할 때 네트워크 토폴로지를 계획하고 필요한 가상 IPv4 주소 서브넷을 지정합니다. Google은 배송 전에 Distributed Cloud 하드웨어를 적절하게 구성합니다.
다음 사항에 유의하세요.
- 이 VIP 서브네트워크는 Distributed Cloud 영역 내에서 실행되는 모든 Kubernetes 클러스터 간에 공유됩니다.
- 요청된 VIP 서브넷의 경로는 Distributed Cloud 영역과 로컬 네트워크 간의 BGP 세션을 통해 공지됩니다.
- 서브네트워크의 첫 번째 (네트워크 ID), 두 번째 (기본 게이트웨이), 마지막 (브로드캐스트 주소) 주소는 핵심 시스템 기능을 위해 예약되어 있습니다. 이러한 주소를 MetalLB 구성의 주소 풀에 할당하지 마세요.
- 각 클러스터는 구성된 VIP 서브넷 내에 있는 별도의 VIP 범위를 사용해야 합니다.
- Distributed Cloud 영역에서 클러스터를 만들 때 클러스터 관리자는 CIDR 표기법을 사용하여 Pod 및 ClusterIP 서비스 주소 풀을 지정합니다. 네트워크 관리자가 클러스터 관리자에게 적절한
LoadBalancerVIP 서브넷을 제공합니다. 클러스터가 생성되면 클러스터 관리자가 해당 VIP 풀을 구성합니다. 원격 컨트롤 플레인 클러스터의 경우
kubectl edit또는kubectl replace명령어를 사용하여metallb-system네임스페이스에서metallb-configConfigMap을 수정해야 합니다.kubectl apply명령어를 사용하지 마세요. Distributed Cloud에서 변경사항을 덮어씁니다.다음 예는 이러한 구성을 보여줍니다.
# metallb-config.yaml apiVersion: v1 kind: ConfigMap metadata: namespace: metallb-system name: metallb-config data: config: | address-pools: - name: default protocol: layer2 addresses: - 192.168.1.2-192.168.1.254로컬 컨트롤 플레인 클러스터의 경우 클러스터를 만들 때
--external-lb-ipv4-address-pools플래그를 사용하여 VIP 풀을 지정해야 합니다. 자세한 내용은 생존 가능 모드를 참고하세요.클러스터 관리자가 적절한 Kubernetes
LoadBalancer서비스를 만듭니다.
단일 노드 풀의 Distributed Cloud 노드는 공통 레이어 2 도메인을 공유하므로 MetalLB 부하 분산기 노드이기도 합니다. Google Cloud 에서 실행되는 Distributed Cloud 제어 영역 노드는 부하 분산기 노드로 작동하지 않습니다.
Distributed Cloud 인그레스
분산 클라우드는 부하 분산 외에도 Kubernetes Ingress 리소스를 지원합니다. Kubernetes Ingress 리소스는 Distributed Cloud 클러스터에서 실행되는 Kubernetes 서비스로의 HTTP(S) 트래픽 흐름을 제어합니다. 다음 예에서는 일반적인 Ingress 리소스를 보여줍니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- http:
paths:
- backend:
service:
name: my-service
port:
number: 80
path: /foo
pathType: Prefix
구성되면 네트워크 트래픽이 istio-ingress 서비스를 통해 흐르며, 이 서비스에는 기본적으로 MetalLB 구성에 지정된 VIP 풀에서 임의의 IP 주소가 할당됩니다. istio-ingress 서비스 정의에서 loadBalancerIP 필드를 사용하여 MetalLB 구성에서 특정 IP 주소 또는 가상 IP 주소를 선택할 수 있습니다. 예를 들면 다음과 같습니다.
apiVersion: v1
kind: Service
metadata:
labels:
istio: ingress-gke-system
release: istio
name: istio-ingress
namespace: gke-system
spec:
loadBalancerIP: <targetLoadBalancerIPaddress>
기본 Distributed Cloud Ingress 리소스 사용 중지
기본적으로 Distributed Cloud 클러스터를 만들면 Distributed Cloud에서 클러스터의 istio-ingress 서비스를 자동으로 구성합니다. istio-ingress 서비스 없이 Distributed Cloud 클러스터를 만들 수 있습니다. 그러려면 다음 단계를 완료하세요.
gcloud
다음 콘텐츠로
SystemsAddonConfig.yaml이라는 YAML 구성 파일을 만듭니다.systemAddonsConfig: ingress: disabled: true
클러스터 생성 명령어에서
--system-addons-config플래그를 사용하여SystemsAddonConfig.yaml파일을 전달합니다. 이 기능을 사용하려면gcloud alpha버전을 사용해야 합니다. 예를 들면 다음과 같습니다.gcloud alpha edge-cloud container clusters create MyGDCECluster1 --location us-west1 \ --system-addons-config=SystemsAddonConfig.yamlDistributed Cloud 클러스터 만들기에 대한 자세한 내용은 클러스터 만들기를 참고하세요.
API
클러스터 생성 요청의 JSON 페이로드에 다음 JSON 콘텐츠를 추가합니다.
"systemAddonConfig" { "ingress" { "disabled": true } }클러스터 만들기에 설명된 대로 클러스터 생성 요청을 제출합니다.
SCTP 지원
Distributed Cloud는 내부 및 외부 네트워킹 모두에 대해 기본 네트워크 인터페이스에서 스트림 제어 전송 프로토콜 (SCTP)을 지원합니다. SCTP 지원에는 NodePort, LoadBalancer, ClusterIP 서비스 유형이 포함됩니다. 포드는 SCTP를 사용하여 다른 포드 및 외부 리소스와 통신할 수 있습니다. 다음 예에서는 SCTP를 사용하여 IPERF를 ClusterIP 서비스로 구성하는 방법을 보여줍니다.
apiVersion: v1
kind: Pod
metadata:
name: iperf3-sctp-server-client
labels:
app.kubernetes.io/name: iperf3-sctp-server-client
spec:
containers:
- name: iperf3-sctp-server
args: ['-s', '-p 31390']
ports:
- containerPort: 31390
protocol: SCTP
name: server-sctp
- name: iperf3-sctp-client
...
---
apiVersion: v1
kind: Service
metadata:
name: iperf3-sctp-svc
spec:
selector:
app.kubernetes.io/name: iperf3-sctp-server-client
ports:
- port: 31390
protocol: SCTP
targetPort: server-sctp
SCTP 커널 모듈
버전 1.5.0부터 Distributed Cloud는 sctp Edge OS 커널 모듈을 로드 가능으로 구성합니다. 이렇게 하면 커널 사용자 공간에 자체 SCTP 프로토콜 스택을 로드할 수 있습니다.
또한 Distributed Cloud는 기본적으로 다음 모듈을 커널에 로드합니다.
| 모듈 이름 | 구성 이름 |
|---|---|
fou |
CONFIG_NET_FOU |
nf_conntrack_proto_gre |
CONFIG_NF_CT_PROTO_GRE |
nf_conntrack_proto_sctp |
CONFIG_NF_CT_PROTO_SCTP |
inotify |
CONFIG_INOTIFY_USER |
xt_redirect |
CONFIG_NETFILTER_XT_TARGET_REDIRECT |
xt_u32 |
CONFIG_NETFILTER_XT_MATCH_U32 |
xt_multiport |
CONFIG_NETFILTER_XT_MATCH_MULTIPORT |
xt_statistic |
CONFIG_NETFILTER_XT_MATCH_STATISTIC |
xt_owner |
CONFIG_NETFILTER_XT_MATCH_OWNER |
xt_conntrack |
CONFIG_NETFILTER_XT_MATCH_CONNTRACK |
xt_mark |
CONFIG_NETFILTER_XT_MARK |
ip6table_mangle |
CONFIG_IP6_NF_MANGLE |
ip6_tables |
CONFIG_IP6_NF_IPTABLES |
ip6table_filter |
CONFIG_IP6_NF_FILTER |
ip6t_reject |
CONFIG_IP6_NF_TARGET_REJECT |
iptable_mangle |
CONFIG_IP_NF_MANGLE |
ip_tables |
CONFIG_IP_NF_IPTABLES |
iptable_filter |
CONFIG_IP_NF_FILTER |
리소스 ClusterDNS개
Distributed Cloud는 spec.domains 섹션을 사용하여 특정 도메인의 업스트림 네임서버를 구성하기 위한 Google Distributed Cloud ClusterDNS 리소스를 지원합니다. 이 리소스 구성에 대한 자세한 내용은 spec.domains을 참고하세요.