Mengimplementasikan model jaringan mode datar dengan dukungan BGP

Dokumen ini menjelaskan cara mengimplementasikan model jaringan mode datar dengan Border Dukungan Gateway Protocol (BGP). Saat Anda mengimplementasikan model jaringan dengan BGP dukungan teknis, BGP secara dinamis memastikan bahwa pod di domain Lapisan 2 yang berbeda dapat berkomunikasi satu sama lain. Jaringan mode datar dengan BGP terkadang disebut IP datar dinamis.

Untuk informasi selengkapnya tentang model jaringan mode datar, lihat Model jaringan mode datar vs pulau.

Cara menerapkan jaringan mode datar yang menggunakan BGP

Jaringan mode datar dengan BGP diaktifkan saat Anda membuat cluster baru. Anda tidak dapat mengaktifkan fitur ini untuk cluster yang ada. Setelah fitur ini diaktifkan, Anda dapat membuat perubahan pada beberapa setelan konfigurasi.

Untuk menerapkan cluster pada model jaringan mode datar dengan dukungan BGP:

  1. Edit file konfigurasi cluster:

    • Tetapkan kolom spec.clusterNetwork.advancedNetworking ke true.
    • Jika Anda ingin mengaktifkan jaringan mode datar untuk IPv4, setel spec.clusterNetwork.flatIPv4 menjadi true.

      Untuk alternatif, lihat Cluster dual-stack (IPv4 Island, IPv6 Dynamic Flat IP), yang mengkonfigurasi cluster Anda dengan jaringan mode datar hanya untuk IPv6.

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: bm
      namespace: cluster-bm
    spec:
      type: user
      ...
      clusterNetwork:
        advancedNetworking: true
        flatIPv4: true
      ...
    

    Jika spec.clusterNetwork.flatIPv4 ditetapkan ke true, kolom spec.clusterNetwork.pods.cidrBlocks diabaikan dan dapat dihilangkan. Namun, Anda perlu menambahkan manifes ClusterCIDRConfigs di cluster file konfigurasi (per-node, per-nodepool, dan/atau per-cluster).

  2. Tambahkan manifes NetworkGatewayGroup ke file konfigurasi cluster:

    Tentukan IP mengambang yang akan digunakan untuk peering BGP. Memastikan bahwa resource namanya adalah default dan namespace-nya adalah namespace cluster.

    ---
    apiVersion: networking.gke.io/v1
    kind: NetworkGatewayGroup
    metadata:
      name: default
      namespace: cluster-bm
    spec:
      floatingIPs:
      - 10.0.1.100
      - 10.0.2.100
    

    NetworkGatewayGroup resource kustom mengelola daftar satu atau beberapa alamat IP mengambang. BGP sesi peering dimulai dari alamat IP mengambang yang Anda tentukan dalam resource kustom NetworkGatewayGroup.

  3. Tambahkan manifes FlatIPMode ke file konfigurasi cluster:

    Nama resource FlatIPMode harus default dan namespace-nya adalah namespace cluster. Nilai peerSelector flatip-peer: "true" cocok dengan label di objek BGPPeer bgppeer1 dan bgppeer2 (ditentukan di langkah berikut), sehingga kedua rekan digunakan untuk jaringan mode datar.

    Manifes FlatIPMode berikut adalah untuk mode datar tumpukan tunggal IPv4 jaringan Anda dengan BGP. Untuk konfigurasi alternatif, lihat Contoh konfigurasi.

    ---
    apiVersion: baremetal.cluster.gke.io/v1alpha1
    kind: FlatIPMode
    metadata:
      name: default
      namespace: cluster-bm
    spec:
      enableBGPIPv4: true
      enableBGPIPv6: false
      peerSelector:
        flatip-peer: "true"
    
  4. Tambahkan satu atau beberapa manifes BGPPeer ke file konfigurasi cluster:

    Anda memilih nama untuk resource, tetapi semua resource BGPPeer harus dalam namespace cluster.

    ---
    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
    
  5. Tambahkan manifes ClusterCIDRConfig ke file konfigurasi cluster:

    Resource CusterCIDRConfig juga harus ada di namespace cluster.

    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 adalah resource kustom yang menentukan rentang CIDR Pod yang akan yang dialokasikan ke node secara dinamis. CNI menggunakan rentang CIDR Pod yang dialokasikan di Node untuk mengalokasikan alamat IP ke tiap Pod yang berjalan di Node. ClusterCIDRConfig juga digunakan untuk jaringan dual-stack. Untuk selengkapnya informasi tentang resource kustom ClusterCIDRConfig, termasuk penggunaan contoh, lihat Memahami resource kustom ClusterCIDRConfig.

  6. Membuat cluster:

    bmctl create cluster
    

    Untuk informasi selengkapnya tentang cara membuat cluster, lihat Ringkasan pembuatan cluster.

    Jika lingkungan Anda mendukung BGP multi-protokol (MP-BGP), IPv4, dan IPv6 rute yang dapat diiklankan pada sesi IPv4 ini. Untuk contoh berbagai konfigurasi umum, termasuk contoh yang menggunakan MP-BGP, lihat Konfigurasi contoh.

Mengubah konfigurasi jaringan mode datar berbasis BGP

Setelah Anda membuat cluster yang dikonfigurasi untuk menggunakan model jaringan mode datar dengan BGP, beberapa setelan konfigurasi dapat diperbarui. Menggunakan cluster admin file kubeconfig saat Anda melakukan update berikutnya pada resource terkait BGP (NetworkGatewayGroup, FlatIPMode, dan BGPPeer). Cluster admin merekonsiliasi perubahan pada cluster pengguna. Jika Anda mengedit sumber daya ini pada cluster pengguna secara langsung, cluster admin akan menimpa perubahan yang Anda rekonsiliasi berikutnya.

Contoh konfigurasi

Bagian berikut mencakup contoh konfigurasi cluster untuk berbagai yang berbeda dari model jaringan mode datar dengan BGP. Contoh konfigurasi file tidak lengkap. Sebagian besar setelan cluster yang tidak relevan dengan mode datar yang sama dengan BGP telah dihilangkan.

Cluster IPv4 satu stack

Contoh file konfigurasi cluster berikut menunjukkan setelan untuk mengonfigurasi cluster IPv4 stack tunggal dengan jaringan mode datar dengan BGP:

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

Cluster dual-stack (Pulau IPv4, IP Datar Dinamis IPv6)

Contoh file konfigurasi cluster berikut menunjukkan setelan untuk mengonfigurasi cluster dual-stack (IPv4/IPv6) dengan jaringan mode datar dengan BGP hanya untuk 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

Cluster dual-stack (IP Datar Dinamis IPv4, IP Datar Dinamis IPv6)

Contoh file konfigurasi cluster berikut menunjukkan setelan untuk mengonfigurasi cluster dual-stack dengan jaringan mode datar dengan 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

Pemecahan masalah

Untuk membantu Anda memecahkan masalah terkait jaringan mode datar dengan BGP, berisi petunjuk untuk memeriksa konfigurasi Anda:

  1. Verifikasi apakah objek FlatIPModes dibuat di namespace cluster di cluster admin:

    kubectl get flatipmodes -A --kubeconfig ADMIN_KUBECONFIG
    

    Responsnya akan terlihat seperti ini:

    NAMESPACE                 NAME      AGE
    cluster-bm                default   2d17h
    
  2. Verifikasi apakah objek flatipmodes.networking.gke.io dibuat pada pengguna :

    Objek flatipmodes.networking.gke.io merupakan cakupan cluster.

    kubectl get flatipmodes.networking.gke.io --kubeconfig USER_KUBECONFIG
    

    Responsnya akan terlihat seperti ini:

    NAME      AGE
    default   2d17h
    
  3. Dapatkan resource BGPSessions untuk melihat sesi saat ini:

    kubectl get bgpsessions -A --kubeconfig USER_KUBECONFIG
    

    Responsnya akan terlihat seperti ini:

    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
    
  4. Dapatkan resource BGPAdvertisedRoute untuk melihat rute yang sedang dilalui diiklankan:

    kubectl get bgpadvertisedroutes -A --kubeconfig USER_KUBECONFIG
    

    Responsnya kurang lebih akan seperti ini:

    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   
    

    Nama rute menunjukkan hop berikutnya. Misalnya, route-via-222-22-208-240 dari contoh respons sebelumnya menunjukkan bahwa hop berikutnya untuk awalan 222.2.0.0/24 yang diiklankan adalah 222.22.208.240.