Dukungan Google Distributed Cloud Dual stack IPv4/IPv6 jaringan. Artinya, sebuah cluster dapat menerima traffic dari perangkat eksternal yang menggunakan Alamat IP versi 4 (IPv4) atau Internet Protocol versi 6 (IPv6).
Jaringan dual-stack menetapkan alamat IPv4 dan IPv6 ke Pod dan node. Layanan Kubernetes dapat memiliki alamat IPv4, alamat IPv6, atau keduanya.
Semua cluster dual-stack menggunakan mode datar untuk IPv6. Secara {i>default<i}, klaster dual-stack menggunakan mode pulau untuk IPv4, tetapi Anda dapat mengkonfigurasinya untuk menggunakan mode datar untuk IPv4.
Untuk membuat cluster dual-stack, jaringan pokok Anda harus mengaktifkan dual-stack. Jika jaringan dasar Anda adalah jaringan IPv4 atau IPv6 {i>single-stack<i}, Anda tidak dapat memulai cluster dual-stack.
Sebelum memulai
Jika node cluster Anda menjalankan RedHat Enterprise Linux, dan memiliki SELinux diaktifkan, lalu pada setiap node:
Di
/etc/firewalld/firewalld.conf
, tetapkanIPv6_rpfilter=no
.Jalankan
systemctl restart firewalld
.
Ringkasan pembuatan cluster dual-stack
Anda dapat mengaktifkan jaringan dual-stack saat membuat cluster baru, tetapi tidak dapat mengaktifkan jaringan dual-stack untuk cluster yang ada.
Ikuti petunjuk di salah satu dokumen pembuatan cluster.
Dalam file konfigurasi Anda, sertakan manifes untuk hal berikut:
- Resource Namespace
- Resource Cluster
- Satu atau beberapa resource NodePool
- Satu atau beberapa resource
ClusterCIDRConfig
Isi manifes Namespace dan manifes NodePool seperti yang Anda lakukan untuk klaster single-stack.
Dalam manifes Cluster, di bagian clusterNetwork.services.cidrBlocks
, tentukan keduanya
rentang CIDR IPv4 dan rentang CIDR IPv6. Ini adalah kriteria pengaktifan untuk
cluster dual-stack. Artinya, jika Anda memberikan rentang CIDR Layanan untuk IPv4
dan IPv6, cluster Anda akan memiliki jaringan dual-stack.
Di manifes Cluster, di bagian clusterNetwork.pods.cidrBlocks
, tentukan IPv4
rentang CIDR, tetapi tidak menentukan rentang CIDR IPv6. Rentang CIDR IPv6 untuk Pod
ditetapkan dalam manifes ClusterCIDRConfig
.
Jika Anda menggunakan load balancing yang dipaketkan, berikan alamat IPv4 dan IPv6
di bagian loadBalancer.addressPools
pada manifes Cluster.
Resource ClusterCIDRConfig
digunakan untuk menentukan rentang CIDR IPv4 dan IPv6
Pod. Anda dapat menggunakan satu resource ClusterCIDRConfig
untuk menentukan rentang CIDR
yang berskala cluster. Artinya, alamat Pod IPv4 untuk semua {i>node<i} diambil
dari satu rentang CIDR, dan alamat Pod
IPv6 untuk semua node akan diambil
dari satu rentang CIDR tunggal. Atau Anda dapat menggunakan beberapa resource ClusterCIDRConfig
untuk
menentukan rentang CIDR yang berlaku untuk
kumpulan {i>node<i} tertentu atau {i>node<i} tertentu.
Keterjangkauan untuk alamat IP Pod
Cluster dual-stack menggunakan mode datar untuk jaringan IPv6. Contoh yang diberikan di dokumen ini ditujukan untuk cluster yang menggunakan jaringan mode datar statis untuk IPv6. Artinya, cluster tidak dikonfigurasi untuk menggunakan Border Gateway Protocol (BGP).
Untuk cluster yang menggunakan jaringan mode datar statis, Anda harus menentukan node dan Alamat IP pod yang semuanya merupakan bagian dari subnet yang sama. Konfigurasi ini membuat untuk klien di luar cluster, tetapi dalam Domain lapisan 2 sebagai node cluster, untuk mengirim paket langsung ke alamat IP Pod.
Misalnya, anggaplah node cluster Anda dan beberapa mesin lainnya berada dalam domain Lapisan 2 yang sama. Berikut adalah salah satu cara untuk menentukan rentang alamat:
Tujuan | Rentang | Nomor alamat |
---|---|---|
Seluruh domain Lapisan 2 | fd12::/108 | 220 |
Pod | fd12::1:0/112 | 216 |
Node | fd12::2:0/112 | 216 |
Mesin lainnya | fd12::3:0/112 | 216 |
VIP | fd12::4:0/112 | 216 |
Dalam contoh sebelumnya, berikut ini adalah poin-poin penting yang harus dipahami:
Semua alamat node, Pod, dan mesin berada dalam rentang yang luas:
fd12::/108
.Alamat IP Pod berada di subset rentang yang luas.
Alamat IP node berada di subset yang berbeda dari rentang yang luas.
Alamat IP komputer lain berada di {i>subset<i} yang berbeda dari {i>range<i}.
Semua rentang subset berbeda satu sama lain.
Pada contoh sebelumnya, setiap mesin di domain Lapisan 2, termasuk cluster node, harus memiliki aturan penerusan untuk rentang yang luas. Contoh:
inet fd12::/108 scope global eth0
Contoh: Membuat cluster dual-stack
Saat membuat cluster dual-stack, Anda memiliki berbagai opsi. Sebagai contoh, Anda rentang CIDR tingkat klaster atau Anda bisa memiliki rentang CIDR yang berlaku untuk kumpulan node tertentu. Anda dapat menggabungkan jaringan tetap IPv6 dengan IPv4 jaringan mode pulau. Atau jaringan IPv4 dan IPv6 Anda bisa saja datar. Anda menggunakan load balancing yang dipaketkan atau load balancing manual.
Bagian ini memberikan satu contoh cara membuat cluster dual-stack. Gugus dalam contoh ini memiliki karakteristik berikut:
- Jaringan IPv4 dalam mode pulau
- Jaringan IPv6 dalam mode datar
- Rentang CIDR IPv4 tingkat cluster untuk Pod
- Rentang CIDR IPv6 seluruh cluster untuk Pod
- Rentang CIDR IPv4 tingkat cluster untuk Layanan
- Rentang CIDR IPv6 tingkat cluster untuk Layanan
- Kumpulan alamat IPv4 yang akan digunakan untuk Layanan jenis
LoadBalancer
- Kumpulan alamat IPv6 yang akan digunakan untuk Layanan jenis
LoadBalancer
- Load balancing paket
Untuk contoh konfigurasi tambahan, lihat Variasi penggunaan ClusterCIDRConfig.
Mengisi file konfigurasi
Ikuti petunjuk di salah satu dokumen pembuatan cluster.
Di file konfigurasi Anda, dalam manifes Cluster
:
Untuk
clusterNetwork.pods.cidrBlocks
, berikan satu rentang CIDR IPv4.Untuk
clusterNetwork.services.cidrBlocks
, berikan dua rentang CIDR: satu untuk IPv4 dan satu untuk IPv6.Untuk
loadBalancer.addressPools
, berikan dua rentang alamat: satu untuk IPv4 dan satu untuk IPv6. Saat Anda membuat Layanan jenisLoadBalancer
, alamat IP eksternal untuk Layanan dipilih dari rentang ini.
Berikut adalah contoh yang menunjukkan bagian manifes Cluster yang relevan:
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: "dual-stack" namespace: "cluster-dual-stack" spec: clusterNetwork: pods: cidrBlocks: - "192.168.0.0/16" services cidrBlocks: - "172.16.0.0/20" - "fd12::5:0/116" ... loadBalancer: mode: "bundled" ... addressPools: - name: "pool-1" addresses: - "10.2.0.212-10.2.0.221" - "fd12::4:101-fd12::4:110"
Dalam file konfigurasi yang sama, sertakan manifes untuk ClusterCIDRConfig
.
Tetapkan
ipv4.cidr
ke rentang CIDR yang sama dengan yang Anda berikan diCluster
manifes. Ini adalah persyaratan jika IPv4 berada dalam mode pulau.Setel
namespace
ke nilai yang sama dengan yang Anda berikan dalam manifesCluster
.Tetapkan
ipv6.cidr
ke rentang CIDR IPv6 untuk Pod.Untuk setiap rentang CIDR, berikan nilai untuk
perNodeMaskSize
guna menentukan berapa banyak Alamat pod akan ditetapkan ke setiap node. Jumlah alamat IPv4 yang ditetapkan ke setiap {i>node<i} harus sama dengan jumlah alamat IPv6 yang ditetapkan ke setiap {i>node<i}. Anda harus menetapkan nilai untukperNodeMaskSize
sebagaimana mestinya. Misalnya, jika Anda ingin 28 alamat per node, tetapkanperNodeMaskSize
sebagai berikut:ipv4.perNodeMaskSize: 24
# (32 - 8 = 24)ipv6.perNodeMaskSize: 120
# (128 - 8 = 120)
Berikut adalah contoh manifes ClusterCIDRConfig
:
apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: ClusterCIDRConfig metadata: name: "cluster-wide-ranges" namespace: "cluster-dual-stack" # Must be the same as the Cluster namespace. spec: ipv4: cidr: "192.168.0.0/16" # For island mode, must be the same as the Cluster CIDR. perNodeMaskSize: 24 ipv6: cidr: "fd12::1:0/112" perNodeMaskSize: 120
Dalam contoh sebelumnya:
Rentang CIDR Pod IPv4 memiliki 2(32-16) = 216 alamat. Ukuran mask per node adalah 24, jadi jumlah alamat yang ditetapkan untuk setiap node adalah 24. node adalah 2(32-24) = 28.
Rentang CIDR Pod IPv6 memiliki 2(128-112) = 216 untuk alamat internal dan eksternal. Ukuran mask per {i>node<i} adalah 120, jadi jumlah alamat yang ditetapkan ke setiap node adalah 2(128-120) = 28.
Contoh file konfigurasi
Selesaikan pembuatan cluster
Selesaikan pembuatan cluster seperti yang dijelaskan dalam dokumen pembuatan cluster.
Melihat node cluster dan Pod
Lihat daftar node cluster:
kubectl --kubeconfig CLUSTER_KUBECONFIG get nodes --output yaml
Ganti CLUSTER_KUBECONFIG
dengan jalur kubeconfig cluster Anda
.
Di output, Anda dapat melihat alamat IPv4 dan IPv6 dari setiap node. Anda dapat lihat juga rentang alamat IPv4 dan IPv6 untuk Pod pada node. Contoh:
- apiVersion: v1 kind: Node ... spec: podCIDR: 192.168.1.0/24 podCIDRs: - 192.168.1.0/24 - fd12::1:100/120 providerID: baremetal://10.2.0.5 status: addresses: - address: 10.2.0.5 type: InternalIP - address: fd12::2:5 type: InternalIP
Lihat daftar Pod di cluster:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods --all-namespaces
Pilih satu Pod, dan cantumkan detailnya. Contoh:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pod gke-metrics-agent-b9qrv \ --namespace kube-system \ -- output yaml
Di output, Anda dapat melihat alamat IPv4 dan IPv6 dari Pod. Contoh:
apiVersion: v1 kind: Pod metadata: ... name: gke-metrics-agent-b9qrv namespace: kube-system ... status: ... podIPs: - ip: 192.168.1.146 - ip: fd12::1:11a
Variasi penggunaan ClusterCIDRConfig
Contoh sebelumnya menggunakan objek ClusterCIDRConfig
untuk menentukan seluruh cluster
Rentang CIDR pod. Artinya, satu rentang CIDR IPv4
digunakan untuk semua Pod di
. Dan satu rentang CIDR IPv6
digunakan untuk semua Pod di cluster.
Dalam situasi tertentu, Anda mungkin tidak ingin
menggunakan satu rentang CIDR untuk semua
Pod dalam cluster. Misalnya, Anda mungkin ingin menentukan rentang CIDR terpisah
untuk setiap kumpulan node, atau Anda mungkin ingin
menentukan rentang CIDR terpisah untuk
{i>node<i}. Untuk mengetahui informasi selengkapnya tentang ClusterCIDRConfig
dan contoh terkait
menggunakannya, lihat Memahami resource kustom ClusterCIDRConfig.
Misalnya, ClusterCIDRConfig
berikut menentukan rentang CIDR untuk node
kumpulan bernama "workers"
.
apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: ClusterCIDRConfig metadata: name: "worker-pool-ccc" namespace: "cluster-dual-stack" spec: ipv4: cidr: "192.168.0.0/16" perNodeMaskSize: 24 ipv6: cidr: "fd12::1:0/112" perNodeMaskSize: 120 nodeSelector: matchLabels: baremetal.cluster.gke.io/node-pool: "workers"
ClusterCIDRConfig
berikut menentukan rentang CIDR untuk satu
node yang memiliki alamat IP 10.2.0.5
:
apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: ClusterCIDRConfig metadata: name: "range-node1" namespace: "cluster-dual-stack" spec: ipv4: cidr: "192.168.1.0/24" perNodeMaskSize: 24 ipv6: cidr: "fd12::1:0/120" perNodeMaskSize: 120 nodeSelector: matchLabels: baremetal.cluster.gke.io/k8s-ip: "10.2.0.5"
Membuat Layanan dual-stack jenis ClusterIP
Berikut manifes untuk Deployment:
apiVersion: apps/v1 kind: Deployment metadata: name: "my-deployment" spec: selector: matchLabels: app: "try-dual-stack" replicas: 3 template: metadata: labels: app: "try-dual-stack" spec: containers: - name: "hello" image: "us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0"
Simpan manifes dalam file bernama my-deployment.yaml
, dan buat Deployment:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-deployment.yaml
Ganti CLUSTER_KUBECONFIG
dengan jalur kubeconfig cluster Anda
.
Berikut manifes untuk Service jenis ClusterIP
:
apiVersion: v1 kind: Service metadata: name: "my-service" spec: selector: app: "try-dual-stack" type: "ClusterIP" ipFamilyPolicy: "RequireDualStack" ipFamilies: - "IPv6" - "IPv4" ports: - port: 80 targetPort: 8080
Dalam konteks latihan ini, inilah poin-poin penting yang harus dipahami tentang manifes Layanan sebelumnya:
Isian
ipFamilyPolicy
diatur keRequireDualStack
. Ini berarti kedua IPv6 dan alamatClusterIP
IPv4 dialokasikan untuk Layanan.Kolom
ipFamilies
menentukan keluarga IPv6 terlebih dahulu dan keluarga IPv4 kedua. Ini berarti bahwaspec.ClusterIP
untuk Layanan akan berupa IPv6 alamat yang dipilih dariclusterNetwork.services.cidrBlocks
di Cluster manifes.
Simpan manifes dalam file bernama my-cip-service.yaml
, dan buat Service:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-cip-service.yaml
Cantumkan detail tentang Layanan:
kubectl --kubeconfig CLUSTER_KUBECONFIG get service my-service --output yaml
Di output, Anda dapat melihat alamat IP cluster untuk Layanan. Misalnya:
apiVersion: v1 kind: Service metadata: name: my-service … spec: clusterIP: fd12::5:9af clusterIPs: - fd12::5:9af - 172.16.12.197
Di node cluster, panggil Service:
curl IPV4_CLUSTER_IP curl IPV6_CLUSTER_IP
Output menampilkan "Hello world" pesan:
Hello, world! Version: 2.0.0 Hostname: my-deployment-xxx
Membuat Layanan dual-stack jenis LoadBalancer
Berikut manifes untuk Service jenis LoadBalancer
:
apiVersion: v1 kind: Service metadata: name: "my-lb-service" spec: selector: app: "try-dual-stack" type: "LoadBalancer" ipFamilyPolicy: "RequireDualStack" ipFamilies: - "IPv6" - "IPv4" ports: - port: 80 targetPort: 8080
Simpan manifes dalam file bernama my-lb-service.yaml
, dan buat Service:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-lb-service.yaml
Perlu diingat bahwa dalam manifes Cluster, Anda telah menentukan rentang alamat IPv6
dan rentang alamat IPv4 yang akan digunakan untuk Layanan jenis LoadBalancer
:
loadBalancer: mode: "bundled" ... addressPools: - name: "pool-1" addresses: - "10.2.0.112-10.2.0.221" - "fd12::4:101-fd12::4:110"
Layanan Anda akan diberi alamat IPv4 eksternal yang dipilih dari IPv4 rentang dan alamat IPv6 eksternal yang dipilih dari rentang IPv6.
Detail daftar untuk Layanan:
kubectl --kubeconfig CLUSTER_KUBECONFIG get service my-lb-service --output yaml
Di output, Anda dapat melihat alamat eksternal untuk Service. Contoh:
apiVersion: v1 kind: Service metadata: name: my-lb-service ... status: loadBalancer: ingress: - ip: 10.2.0.213 - ip: fd12::4:101
Nilai yang mungkin untuk ipFamilyPolicy
Saat membuat Layanan dual-stack, Anda dapat menetapkan ipFamilyPolicy
ke salah satu
nilai-nilai ini:
SingleStack
: Pengontrol mengalokasikan alamat IP cluster untuk Layanan, dipilih dari rentang pertama yang ditentukan dalam manifes Cluster yang berada diclusterNetwork.services.cidrBlocks
.PreferDualStack
: Pengontrol mengalokasikan alamat IP cluster IPv4 dan IPv6 untuk Layanan, yang dipilih dari rentang yang ditentukan dalam manifes Cluster di bawahclusterNetwork.services.cidrBlocks
. Jika cluster bukan dual-stack cluster, perilakunya sama denganSingleStack
.RequireDualStack
: Pengontrol mengalokasikan IP cluster IPv4 dan IPv6 untuk Service, yang dipilih dari rentang yang ditentukan dalam Cluster manifes padaclusterNetwork.services.cidrBlocks
. Fungsi ini menetapkan nilaispec.clusterIP
berdasarkan kelompok alamat pertama yang ditentukan dalam Layanan manifes padaipFamilies
.
Informasi selengkapnya
Untuk informasi selengkapnya tentang cara membuat Layanan dual-stack, lihat Opsi dual-stack di Layanan baru.