이 문서에서는 경계 게이트웨이 프로토콜(BGP)을 지원하여 플랫 모드 네트워크 모델을 구현하는 방법을 설명합니다. BGP를 지원하는 네트워크 모델을 구현하면 BGP는 서로 다른 레이어 2 도메인의 포드가 서로 통신할 수 있도록 동적으로 보장합니다. BGP를 사용하는 플랫 모드 네트워킹을 동적 플랫 IP라고도 합니다
플랫 모드 네트워크 모델에 대한 자세한 내용은 플랫 모드 및 아일랜드 모드 네트워크 모델 비교를 참조하세요.
BGP를 사용하는 플랫 모드 네트워크를 구현하는 방법
새 클러스터를 만들 때 BGP를 사용하는 플랫 모드 네트워킹이 사용 설정됩니다. 기존 클러스터에 이 기능을 사용 설정할 수 없습니다. 이 기능을 사용 설정하면 일부 구성 설정을 변경할 수 있습니다.
BGP를 지원하는 플랫 모드 네트워크 모델에서 클러스터를 구현하려면 다음 안내를 따르세요.
클러스터 구성 파일을 수정합니다.
spec.clusterNetwork.advancedNetworking
필드를true
로 설정합니다.IPv4에 플랫 모드 네트워킹을 사용 설정하려면
spec.clusterNetwork.flatIPv4
필드를true
로 설정합니다.또는 IPv6 전용 플랫 모드 네트워킹을 사용하여 클러스터를 구성하는 이중 스택 클러스터(IPv4 섬, IPv6 동적 플랫 IP)를 참조하세요.
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: bm namespace: cluster-bm spec: type: user ... clusterNetwork: advancedNetworking: true flatIPv4: true ...
spec.clusterNetwork.flatIPv4
가true
로 설정되면spec.clusterNetwork.pods.cidrBlocks
필드는 무시되고 생략될 수 있습니다. 그러나 클러스터 구성 파일(노드별, 노드 풀별 또는 클러스터별)에ClusterCIDRConfigs
매니페스트를 추가해야 합니다.NetworkGatewayGroup
매니페스트를 클러스터 구성 파일에 추가합니다.BGP 피어링에 사용할 부동 IP를 지정합니다. 리소스 이름이
default
이고 네임스페이스가 클러스터 네임스페이스인지 확인합니다.--- apiVersion: networking.gke.io/v1 kind: NetworkGatewayGroup metadata: name: default namespace: cluster-bm spec: floatingIPs: - 10.0.1.100 - 10.0.2.100
NetworkGatewayGroup
커스텀 리소스는 유동 IP 주소 하나 이상의 목록을 관리합니다. BGP 피어링 세션은NetworkGatewayGroup
커스텀 리소스에 지정한 유동 IP 주소로부터 시작됩니다.FlatIPMode
매니페스트를 클러스터 구성 파일에 추가합니다.FlatIPMode
리소스 이름은default
이어야 하며 네임스페이스는 클러스터 네임스페이스입니다.peerSelector
값flatip-peer: "true"
는 BGPPeer 객체bgppeer1
및bgppeer2
(다음 단계에서 정의됨)의 라벨과 일치하므로 두 피어 모두 플랫 모드 네트워킹에 사용됩니다.다음
FlatIPMode
매니페스트는 BGP를 사용하는 IPv4 단일 스택, 플랫 모드 네트워킹을 위한 것입니다. 대체 구성은 구성 예시를 참조하세요.--- apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: FlatIPMode metadata: name: default namespace: cluster-bm spec: enableBGPIPv4: true enableBGPIPv6: false peerSelector: flatip-peer: "true"
클러스터 구성 파일에
BGPPeer
매니페스트를 하나 이상 추가합니다.리소스 이름을 선택합니다. 하지만 모든
BGPPeer
리소스는 클러스터 네임스페이스에 있어야 합니다.--- apiVersion: networking.gke.io/v1 kind: BGPPeer metadata: name: bgppeer1 namespace: cluster-bm labels: flatip-peer: "true" spec: localASN: 65001 peerASN: 65000 peerIP: 10.0.1.254 sessions: 2 --- apiVersion: networking.gke.io/v1 kind: BGPPeer metadata: name: bgppeer2 namespace: cluster-bm labels: flatip-peer: "true" spec: localASN: 65001 peerASN: 65000 peerIP: 10.0.2.254 sessions: 2
ClusterCIDRConfig
매니페스트를 클러스터 구성 파일에 추가합니다.CusterCIDRConfig
리소스도 클러스터 네임스페이스에 있어야 합니다.apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: ClusterCIDRConfig metadata: name: cluster-wide-1 namespace: cluster-bm spec: ipv4: cidr: "192.168.0.0/16" perNodeMaskSize: 24
ClusterCIDRConfig는 노드에 동적으로 할당할 포드 CIDR 범위를 지정하는 커스텀 리소스입니다. CNI는 노드에 할당된 포드 CIDR 범위를 사용하여 IP 주소를 노드에서 실행되는 개별 포드에 할당합니다.
ClusterCIDRConfig
는 이중 스택 네트워킹에도 사용됩니다. 사용 예시를 포함하여ClusterCIDRConfig
커스텀 리소스에 대한 자세한 내용은 ClusterCIDRConfig 커스텀 리소스 이해를 참조하세요.클러스터를 만듭니다.
bmctl create cluster
클러스터 만들기에 대한 자세한 내용은 클러스터 만들기 개요를 참조하세요.
환경에서 멀티 프로토콜 BGP(MP-BGP)를 지원하면 IPv4 및 IPv6 경로를 통해 이러한 IPv4 세션을 공지할 수 있습니다. MP-BGP를 사용하는 예시를 포함한 다양한 구성의 예시는 구성 예시를 참조하세요.
BGP 기반 플랫 모드 네트워킹 구성 수정
BGP로 플랫 모드 네트워크 모델을 사용하도록 구성된 클러스터를 만든 후 일부 구성 설정을 업데이트할 수 있습니다. BGP 관련 리소스(NetworkGatewayGroup
, FlatIPMode
, BGPPeer
)를 나중에 업데이트할 때 관리자 클러스터 kubeconfig 파일을 사용합니다. 그러면 관리자 클러스터에서 사용자 클러스터에 대한 변경사항을 조정합니다. 사용자 클러스터에서 이러한 리소스를 직접 수정하면 관리자 클러스터에서 후속 조정의 변경사항을 덮어씁니다.
구성 예시
다음 섹션에는 BGP를 사용하는 플랫 모드 네트워크 모델의 다양한 변형에 대한 클러스터 구성 예시가 포함되어 있습니다. 샘플 구성 파일이 완료되지 않았습니다. BGP를 사용하는 플랫 모드 네트워킹과 관련 없는 대부분의 클러스터 설정은 생략되었습니다.
단일 스택 IPv4 클러스터
다음 클러스터 구성 파일 샘플에서는 BGP로 플랫 모드 네트워킹을 사용하여 단일 스택 IPv4 클러스터를 구성하는 설정을 보여줍니다.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: true
services:
cidrBlocks:
- 10.96.0.0/12
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "222.2.0.0/16"
perNodeMaskSize: 24
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: true
enableBGPIPv6: false
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
이중 스택 클러스터(IPv4 섬, IPv6 동적 플랫 IP)
다음 클러스터 구성 파일 샘플에서는 IPv6에만 BGP를 사용하는 플랫 모드 네트워킹으로 이중 스택(IPv4/IPv6) 클러스터를 구성하는 설정을 보여줍니다.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: false
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/12
# Additional IPv6 CIDR block determines if the cluster is dual-stack
- 2620:0:1000:2630:5:2::/112
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "192.168.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 120
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: false
enableBGPIPv6: true
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
이중 스택 클러스터(IPv4 동적 플랫 IP, IPv6 동적 플랫 IP)
다음 클러스터 구성 파일 샘플에서는 BGP로 플랫 모드 네트워킹을 사용하여 이중 스택 클러스터를 구성하는 설정을 보여줍니다.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: true
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/12
# Additional IPv6 CIDR block determines if the cluster is dual-stack
- 2620:0:1000:2630:5:2::/112
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "222.2.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 120
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: true
enableBGPIPv6: true
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
문제 해결
BGP를 사용하는 플랫 모드 네트워킹과 관련된 문제를 해결할 수 있도록 이 섹션에는 구성 확인을 위한 안내가 포함되어 있습니다.
FlatIPModes
객체가 관리자 클러스터의 클러스터 네임스페이스에 생성되었는지 확인합니다.kubectl get flatipmodes -A --kubeconfig ADMIN_KUBECONFIG
다음과 유사한 응답이 표시되어야 합니다.
NAMESPACE NAME AGE cluster-bm default 2d17h
flatipmodes.networking.gke.io
객체가 사용자 클러스터에 생성되었는지 확인합니다.flatipmodes.networking.gke.io
객체의 클러스터 범위는 다음과 같습니다.kubectl get flatipmodes.networking.gke.io --kubeconfig USER_KUBECONFIG
다음과 유사한 응답이 표시되어야 합니다.
NAME AGE default 2d17h
BGPSessions
리소스를 가져와서 현재 세션을 봅니다.kubectl get bgpsessions -A --kubeconfig USER_KUBECONFIG
다음과 유사한 응답이 표시되어야 합니다.
NAMESPACE NAME LOCAL ASN PEER ASN LOCAL IP PEER IP STATE LAST REPORT kube-system 10.0.1.254-node-01 65500 65000 10.0.1.100 10.0.1.254 Established 2s kube-system 10.0.1.254-node-02 65500 65000 10.0.3.100 10.0.1.254 NotEstablished 2s kube-system 10.0.3.254-node-01 65500 65000 10.0.1.100 10.0.3.254 NotEstablished 2s kube-system 10.0.3.254-node-02 65500 65000 10.0.3.100 10.0.3.254 Established 2s
BGPAdvertisedRoute
리소스를 가져와서 현재 공지 중인 경로를 확인합니다.kubectl get bgpadvertisedroutes -A --kubeconfig USER_KUBECONFIG
응답은 다음과 같이 표시되어야 합니다.
NAMESPACE NAME PREFIX METRIC kube-system route-via-222-22-208-240 222.2.0.0/24 kube-system route-via-222-22-209-240 222.2.1.0/24
경로 이름은 다음 홉을 나타냅니다. 예를 들어 앞의 응답 예시에서
route-via-222-22-208-240
은 공지된 프리픽스222.2.0.0/24
의 다음 홉이222.22.208.240
임을 나타냅니다.