Dual-stack IPv4/IPv6
Kubernetes v1.16 [alpha]
Dual-stack IPv4/IPv6 memungkinkan pengalokasian alamat IPv4 dan IPv6 untuk Pod dan Service.
Jika kamu mengaktifkan jaringan dual-stack IPv4/IPv6 untuk klaster Kubernetes kamu, klaster akan mendukung pengalokasian kedua alamat IPv4 dan IPv6 secara bersamaan.
Fitur-fitur yang didukung
Mengaktifkan dual-stack IPv4 / IPv6 pada klaster Kubernetes kamu untuk menyediakan fitur-fitur berikut ini:
- Jaringan Pod dual-stack (pengalokasian sebuah alamat IPv4 dan IPv6 untuk setiap Pod)
- Service yang mendukung IPv4 dan IPv6 (setiap Service hanya untuk satu keluarga alamat)
- Perutean Pod ke luar klaster (misalnya Internet) melalui antarmuka IPv4 dan IPv6
Prasyarat
Prasyarat berikut diperlukan untuk menggunakan dual-stack IPv4/IPv6 pada klaster Kubernetes :
- Kubernetes versi 1.16 atau yang lebih baru
- Dukungan dari penyedia layanan untuk jaringan dual-stack (Penyedia layanan cloud atau yang lainnya harus dapat menyediakan antarmuka jaringan IPv4/IPv6 yang dapat dirutekan) untuk Node Kubernetes
- Sebuah plugin jaringan yang mendukung dual-stack (seperti Kubenet atau Calico)
- Kube-proxy yang berjalan dalam mode IPVS
Mengaktifkan dual-stack IPv4/IPv6
Untuk mengaktifkan dual-stack IPv4/IPv6, aktifkan gerbang fitur (feature gate) IPv6DualStack
untuk komponen-komponen yang relevan dari klaster kamu, dan tetapkan jaringan
dual-stack pada klaster:
- kube-controller-manager:
--feature-gates="IPv6DualStack=true"
--cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR>
misalnya--cluster-cidr=10.244.0.0/16,fc00::/24
--service-cluster-ip-range=<IPv4 CIDR>,<IPv6 CIDR>
--node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6
nilai bawaannya adalah /24 untuk IPv4 dan /64 untuk IPv6
- kubelet:
--feature-gates="IPv6DualStack=true"
- kube-proxy:
--proxy-mode=ipvs
--cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR>
--feature-gates="IPv6DualStack=true"
Perhatian:
Jika kamu menentukan blok alamat IPv6 yang lebih besar dari /24 melalui--cluster-cidr
pada baris perintah, maka penetapan tersebut akan gagal.Service
Jika klaster kamu mengaktifkan jaringan dual-stack IPv4/IPv6, maka kamu dapat
membuat Service dengan
alamat IPv4 atau IPv6. Kamu dapat memilih keluarga alamat untuk clusterIP
Service kamu dengan mengatur bagian, .spec.ipFamily
, pada Service tersebut.
Kamu hanya dapat mengatur bagian ini saat membuat Service baru. Mengatur bagian
.spec.ipFamily
bersifat opsional dan hanya boleh digunakan jika kamu berencana
untuk mengaktifkan Service dan Ingress IPv4 dan IPv6
pada klaster kamu. Konfigurasi bagian ini bukanlah syarat untuk lalu lintas
[egress] (#lalu-lintas-egress).
Catatan:
Keluarga alamat bawaan untuk klaster kamu adalah keluarga alamat dari rentang clusterIP Service pertama yang dikonfigurasi melalui opsi--service-cluster-ip-range
pada kube-controller-manager.Kamu dapat mengatur .spec.ipFamily
menjadi salah satu dari:
IPv4
: Dimana server API akan mengalokasikan IP dariservice-cluster-ip-range
yaituipv4
IPv6
: Dimana server API akan mengalokasikan IP dariservice-cluster-ip-range
yaituipv6
Spesifikasi Service berikut ini tidak memasukkan bagian ipFamily
.
Kubernetes akan mengalokasikan alamat IP (atau yang dikenal juga sebagai
"cluster IP") dari service-cluster-ip-range
yang dikonfigurasi pertama kali
untuk Service ini.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Spesifikasi Service berikut memasukkan bagian ipFamily
. Sehingga Kubernetes
akan mengalokasikan alamat IPv6 (atau yang dikenal juga sebagai "cluster IP")
dari service-cluster-ip-range
yang dikonfigurasi untuk Service ini.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ipFamily: IPv6
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Sebagai perbandingan, spesifikasi Service berikut ini akan dialokasikan sebuah alamat
IPv4 (atau yang dikenal juga sebagai "cluster IP") dari service-cluster-ip-range
yang dikonfigurasi untuk Service ini.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ipFamily: IPv4
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Tipe LoadBalancer
Penyedia layanan cloud yang mendukung IPv6 untuk pengaturan beban eksternal,
Mengatur bagian type
menjadi LoadBalancer
sebagai tambahan terhadap mengatur bagian
ipFamily
menjadi IPv6
menyediakan sebuah cloud load balancer untuk Service kamu.
Lalu lintas egress
Penggunaan blok alamat IPv6 yang dapat dirutekan dan yang tidak dapat dirutekan secara publik diperbolehkan selama CNI dari penyedia layanan dapat mengimplementasikan transportasinya. Jika kamu memiliki Pod yang menggunakan IPv6 yang dapat dirutekan secara publik dan ingin agar Pod mencapai tujuan di luar klaster (misalnya Internet publik), kamu harus mengatur IP samaran untuk lalu lintas keluar dan balasannya. ip-masq-agent bersifat dual-stack aware, jadi kamu bisa menggunakan ip-masq-agent untuk masquerading IP dari klaster dual-stack.
Masalah-masalah yang diketahui
- Kubenet memaksa pelaporan posisi IP untuk IPv4,IPv6 IP (--cluster-cidr)