Container Network Interface (CNI) adalah spesifikasi untuk mengonfigurasi antarmuka jaringan di Kubernetes. Rantai CNI merupakan mode yang memungkinkan penggunaan beberapa plug-in CNI secara berantai guna mengonfigurasi jaringan dengan lebih fleksibel. Di kluster Container Service for Kubernetes (ACK), rantai CNI dapat menghubungkan beberapa plug-in CNI, masing-masing menangani tugas jaringan tertentu seperti alokasi alamat IP atau routing. Saat ACK membuat kontainer, rantai CNI memanggil plug-in pertama dan meneruskan keluarannya ke plug-in berikutnya hingga semua plug-in dalam rantai menyelesaikan tugasnya.
ACK tidak menjamin bahwa plugin CNI dapat bekerja sama satu sama lain. Mengonfigurasi rantai CNI kustom adalah operasi berisiko tinggi. Pastikan Anda memahami cara kerja rantai CNI dan berhati-hati saat mengonfigurasi rantai CNI. Kesalahan konfigurasi dapat menyebabkan gangguan bisnis.
Prasyarat
Sebuah kluster ACK dikelola telah dibuat dan kluster tersebut menggunakan Terway. Untuk informasi lebih lanjut, lihat Buat kluster ACK dikelola.
Batasan
Versi plugin Terway harus 1.5.6 atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui komponen, lihat Kelola komponen.
Konfigurasikan rantai CNI kustom
Untuk menggunakan rantai CNI, tambahkan plugin CNI yang akan digunakan ke file konfigurasi Terway.
Jalankan perintah berikut untuk mengedit file konfigurasi
eni-config.kubectl edit cm -nkube-system eni-configParameter
Deskripsi
10-terway.conf
Konfigurasi CNI Terway. Jangan modifikasi konfigurasi ini.
PentingJangan modifikasi file konfigurasi asli.
10-terway.conflist
Konfigurasi rantai CNI kustom.
Konfigurasi CNI pertama dalam
pluginsharus merupakan konfigurasi yang ada di dalam10-terway.conf.PentingKonfigurasi dalam topik ini adalah contoh. Jangan langsung gunakan konfigurasi karena ini dapat menyebabkan kesalahan konfigurasi.
Pastikan isi blok konfigurasi dalam format JSON.
File konfigurasi
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "plugins": [ { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }, { "type": "portmap", "capabilities": {"portMappings": true}, "externalSetMarkChain":"KUBE-MARK-MASQ" } ] } 10-terway.conf: | { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }Jalankan
kubectl rollout restart -n kube-system daemonset.apps/terway-eniipuntuk membuat ulang Pod Terway.Jika konfigurasi benar, konfigurasi plug-in kustom akan tersedia di file
etc/cni/net.d/10-terway.conflistpada node.
Casus penggunaan
ACK tidak menjamin bahwa plugin CNI dapat bekerja sama satu sama lain. Mengonfigurasi rantai CNI kustom adalah operasi berisiko tinggi. Pastikan Anda memahami cara kerja rantai CNI dan berhati-hati saat mengonfigurasi rantai CNI. Kesalahan konfigurasi dapat menyebabkan gangguan bisnis.
Casus penggunaan berikut hanya untuk referensi.
Konfigurasikan portmap
Plugin portmap digunakan untuk memetakan port internal pod ke port host, sehingga memungkinkan pod mengekspos layanan tertentu ke akses eksternal.
Jika Anda memerlukan akses Internet, pastikan port yang sesuai telah dibuka untuk lalu lintas masuk di grup keamanan.
Contoh konfigurasi
Akses menggunakan alamat IP pribadi dan port node:
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "plugins": [ { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }, { "type": "portmap", "capabilities": {"portMappings": true}, "externalSetMarkChain":"KUBE-MARK-MASQ" } ] } 10-terway.conf: | { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }Akses menggunakan alamat IP publik dan port:
Untuk skenario akses Internet, konfigurasi berikut diperlukan:
Item Konfigurasi
Non-Datapath V2
Datapath V2
masqAll
Tidak diperlukan
Diperlukan
symmetric_routing
Diperlukan
Diperlukan
masqAll: Parameter untuk plug-in portmap. Memerlukan portmap v1.7.1 atau yang lebih baru.
symmetric_routing: Parameter untuk plug-in Terway. Memerlukan Terway v1.15.0 atau yang lebih baru.
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "plugins": [ { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "symmetric_routing": true, "capabilities": {"bandwidth": true} }, { "type": "portmap", "capabilities": {"portMappings": true}, "masqAll": false } ] } 10-terway.conf: | { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }
Nonaktifkan alamat link-local IPv6 untuk kontainer
Meskipun fitur dual-stack IPv6 tidak diaktifkan untuk kluster Anda, antarmuka jaringan kontainer secara otomatis diberi alamat link-lokal IPv6 dari rentang fe80::/64 saat pembuatan. Ini merupakan perilaku bawaan kernel sistem operasi. Perilaku ini biasanya tidak berbahaya dan tidak memengaruhi operasi bisnis normal.
Namun, jika aplikasi Anda mengalami kesalahan saat menangani alamat jaringan, aplikasi mungkin gagal mengenali alamat link-local IPv6 sebagai alamat IP pod. Akibatnya, aplikasi mencoba menggunakan alamat link-local IPv6 untuk komunikasi. Alamat link-local hanya digunakan untuk komunikasi antar perangkat pada link yang sama dan tidak dapat digunakan untuk komunikasi antar jaringan. Jika tidak ditangani dengan benar, aplikasi mungkin mengalami pengecualian. Jika kode aplikasi Anda mengandung cacat dalam skenario ini, laporkan kepada vendor aplikasi terlebih dahulu dan cari solusi.
Jika Anda tetap perlu menonaktifkan alamat link-lokal IPv6 di kontainer, Anda dapat melakukannya dengan mengonfigurasi plug-in tuning.
Contoh konfigurasi
kind: ConfigMap
apiVersion: v1
metadata:
name: eni-config
namespace: kube-system
data:
10-terway.conflist: |
{
"plugins": [
{
"cniVersion": "0.4.0",
"name": "terway",
"type": "terway",
"capabilities": {"bandwidth": true}
},
{
"type": "tuning",
"sysctl": {
"net.ipv6.conf.all.disable_ipv6": "1",
"net.ipv6.conf.default.disable_ipv6": "1",
"net.ipv6.conf.lo.disable_ipv6": "1"
}
}
]
}
10-terway.conf: |
{
"cniVersion": "0.4.0",
"name": "terway",
"type": "terway",
"capabilities": {"bandwidth": true}
}