Distributed Cloud 네트워킹 기능

이 페이지에서는 서브네트워크, BGP 피어링 세션, 부하 분산을 비롯한 Google Distributed Cloud의 네트워킹 기능을 설명합니다.

Distributed Cloud Edge Network API 사용 설정

Distributed Cloud 네트워킹을 구성하려면 먼저 Distributed Cloud Edge Network API를 사용 설정해야 합니다. 이렇게 하려면 이 섹션의 단계를 완료하세요.

콘솔

  1. Google Cloud 콘솔에서 Distributed Cloud Edge Network API 페이지로 이동합니다.

    API 사용 설정하기

  2. 사용 설정을 클릭합니다.

gcloud

다음 명령어를 사용하세요.

gcloud services enable edgenetwork.googleapis.com

Distributed Cloud 네트워킹 구성

이 섹션에서는 Distributed Cloud 네트워킹 구성요소를 구성하는 방법을 설명합니다.

Distributed Cloud의 일반적인 네트워크 구성은 다음 단계로 구성됩니다.

  1. 선택사항: 필요한 경우 타겟 영역의 네트워크 구성을 초기화합니다.

  2. 네트워크를 만듭니다.

  3. 네트워크 내에 서브네트워크를 하나 이상 만듭니다.

  4. 해당 상호 연결 연결을 사용하여 PE 라우터와 북바운드 BGP 피어링 세션을 설정합니다.

  5. 해당 서브넷을 사용하여 워크로드를 실행하는 포드와 하위 BGP 피어링 세션을 설정합니다.

  6. 선택사항: 고가용성을 위해 루프백 BGP 피어링 세션을 설정합니다.

  7. 구성을 테스트합니다.

  8. 포드를 네트워크에 연결합니다.

선택사항: 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 피어링 세션을 설정하려면 다음 단계를 따르세요.

  1. 영역에서 사용 가능한 상호 연결을 나열한 다음 이 피어링 세션의 대상 상호 연결을 선택합니다.

  2. 선택한 Interconnect에서 하나 이상의 Interconnect 연결을 만듭니다. 상호 연결 연결은 다음 단계에서 만드는 라우터를 선택한 상호 연결에 연결합니다.

  3. 라우터를 만듭니다. 이 라우터는 이전 단계에서 만든 상호 연결 연결을 사용하여 상호 연결과 네트워크 간에 트래픽을 라우팅합니다.

  4. 이 절차의 앞부분에서 만든 각 Interconnect 연결에 대해 라우터에 인터페이스를 추가합니다. 각 인터페이스에 대해 Distributed Cloud 랙에 있는 해당 ToR (Top-of-Rack) 스위치의 IP 주소를 사용합니다. 자세한 내용은 북바운드 피어링 세션 설정을 참고하세요.

  5. 이전 단계에서 라우터에 만든 각 인터페이스의 피어를 추가합니다.

다운스트림 BGP 피어링 세션 설정

로컬 네트워크에서 워크로드로의 인바운드 연결을 사용 설정하려면 피어링 에지 라우터와 포드가 속한 서브넷 간에 하나 이상의 다운스트림 BGP 피어링 세션을 설정해야 합니다. 각 서브네트워크의 게이트웨이 IP 주소는 분산 클라우드 랙에 있는 해당 ToR 스위치의 IP 주소입니다.

다운스트림 BGP 피어링 세션을 설정하려면 다음 단계를 따르세요.

  1. 인바운드 연결을 프로비저닝하려는 각 서브네트워크에 대해 타겟 네트워크의 라우터에 인터페이스를 추가합니다. 자세한 내용은 다운스트림 피어링 세션 설정을 참고하세요.

  2. 이전 단계에서 라우터에 만든 각 인터페이스에 대해 피어를 추가합니다.

선택사항: 루프백 BGP 피어링 세션 설정

워크로드와 로컬 네트워크 간에 고가용성 연결을 사용 설정하려면 대상 포드와 Distributed Cloud 랙의 ToR 스위치 간에 루프백 BGP 피어링 세션을 설정하면 됩니다. 루프백 피어링 세션은 포드에 대해 두 개의 독립적인 피어링 세션을 설정합니다. 각 세션은 ToR 스위치 하나와 연결됩니다.

루프백 BGP 피어링 세션을 설정하려면 다음 단계를 따르세요.

  1. 타겟 네트워크의 라우터에 루프백 인터페이스를 추가합니다. 자세한 내용은 루프백 피어링 세션 설정을 참고하세요.

  2. 루프백 인터페이스의 피어 추가

구성 테스트

생성한 네트워크 구성요소의 구성을 테스트하려면 다음을 실행하세요.

  1. 네트워크의 운영 상태를 확인합니다.

  2. 각 서브네트워크의 프로비저닝 상태를 확인합니다.

  3. 인터커넥트의 운영 상태를 확인합니다.

  4. 상호 연결 연결의 운영 상태를 확인합니다.

  5. 라우터의 작동 상태를 확인합니다.

포드를 네트워크에 연결

포드를 네트워크에 연결하고 고급 네트워크 기능을 구성하려면 네트워크 기능 운영자의 안내를 따르세요.

부하 분산

Distributed Cloud는 Layer 2 모드의 MetalLB를 기반으로 하는 번들 네트워크 부하 분산 솔루션과 함께 제공됩니다. 이 솔루션을 사용하면 다음과 같이 가상 IP 주소 (VIP)를 사용하여 Distributed Cloud 영역에서 실행되는 서비스를 외부 세계에 노출할 수 있습니다.

  1. 네트워크 관리자는 Distributed Cloud를 주문할 때 네트워크 토폴로지를 계획하고 필요한 가상 IPv4 주소 서브넷을 지정합니다. Google은 배송 전에 Distributed Cloud 하드웨어를 적절하게 구성합니다. 다음 사항에 유의하세요.
    • 이 VIP 서브네트워크는 Distributed Cloud 영역 내에서 실행되는 모든 Kubernetes 클러스터 간에 공유됩니다.
    • 요청된 VIP 서브넷의 경로는 Distributed Cloud 영역과 로컬 네트워크 간의 BGP 세션을 통해 공지됩니다.
    • 서브네트워크의 첫 번째 (네트워크 ID), 두 번째 (기본 게이트웨이), 마지막 (브로드캐스트 주소) 주소는 핵심 시스템 기능을 위해 예약되어 있습니다. 이러한 주소를 MetalLB 구성의 주소 풀에 할당하지 마세요.
    • 각 클러스터는 구성된 VIP 서브넷 내에 있는 별도의 VIP 범위를 사용해야 합니다.
  2. Distributed Cloud 영역에서 클러스터를 만들 때 클러스터 관리자는 CIDR 표기법을 사용하여 Pod 및 ClusterIP 서비스 주소 풀을 지정합니다. 네트워크 관리자가 클러스터 관리자에게 적절한 LoadBalancer VIP 서브넷을 제공합니다.
  3. 클러스터가 생성되면 클러스터 관리자가 해당 VIP 풀을 구성합니다. 원격 컨트롤 플레인 클러스터의 경우 kubectl edit 또는 kubectl replace 명령어를 사용하여 metallb-system 네임스페이스에서 metallb-config ConfigMap을 수정해야 합니다. 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 풀을 지정해야 합니다. 자세한 내용은 생존 가능 모드를 참고하세요.

  4. 클러스터 관리자가 적절한 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

  1. 다음 콘텐츠로 SystemsAddonConfig.yaml이라는 YAML 구성 파일을 만듭니다.

    systemAddonsConfig:
     ingress:
       disabled: true
    
  2. 클러스터 생성 명령어에서 --system-addons-config 플래그를 사용하여 SystemsAddonConfig.yaml 파일을 전달합니다. 이 기능을 사용하려면 gcloud alpha 버전을 사용해야 합니다. 예를 들면 다음과 같습니다.

    gcloud alpha edge-cloud container clusters create MyGDCECluster1 --location us-west1 \
        --system-addons-config=SystemsAddonConfig.yaml
    

    Distributed Cloud 클러스터 만들기에 대한 자세한 내용은 클러스터 만들기를 참고하세요.

API

  1. 클러스터 생성 요청의 JSON 페이로드에 다음 JSON 콘텐츠를 추가합니다.

    "systemAddonConfig" {
       "ingress" {
               "disabled": true
       }
    }
    
  2. 클러스터 만들기에 설명된 대로 클러스터 생성 요청을 제출합니다.

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을 참고하세요.

다음 단계