Container Network Interface (CNI) adalah spesifikasi untuk mengonfigurasi antarmuka jaringan di Kubernetes. Rantai CNI memungkinkan penggunaan beberapa plug-in CNI guna mengonfigurasi jaringan secara lebih fleksibel. Di kluster Container Service for Kubernetes (ACK), rantai CNI dapat menghubungkan berbagai 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 hasilnya ke plug-in berikutnya hingga seluruh plug-in dalam rantai menyelesaikan tugasnya.
Prasyarat
Anda memiliki ACK managed cluster yang menggunakan plug-in jaringan Terway.
Versi Terway adalah v1.5.6 atau lebih baru, dan kluster tidak berada dalam mode jaringan ENI eksklusif.
ACK tidak menjamin kompatibilitas antar beberapa plug-in CNI. Mengonfigurasi rantai CNI kustom merupakan operasi berisiko tinggi. Sebelum melanjutkan, pastikan Anda memahami sepenuhnya fungsionalitas setiap plug-in CNI dan berhati-hati untuk menghindari kesalahan konfigurasi yang dapat menyebabkan gangguan bisnis.
Konfigurasikan rantai CNI kustom
Untuk menggunakan rantai CNI, tambahkan plug-in CNI yang akan digunakan ke file konfigurasi Terway.
Jalankan perintah berikut untuk mengedit ConfigMap
eni-config.kubectl edit cm -nkube-system eni-configParameter
Deskripsi
10-terway.conf
Konfigurasi CNI Terway. Jangan mengubah konfigurasi ini.
PentingJangan mengubah file konfigurasi asli.
10-terway.conflist
Konfigurasi rantai CNI kustom.
Konfigurasi CNI pertama dalam
pluginsharus merupakan konfigurasi yang didefinisikan dalam10-terway.conf.PentingKonfigurasi dalam topik ini hanya sebagai contoh. Jangan langsung menggunakan konfigurasi ini karena 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 perintah
kubectl rollout restart -n kube-system daemonset.apps/terway-eniipuntuk membuat ulang Pod Terway.Jika konfigurasi benar, konfigurasi plug-in kustom Anda akan terlihat di file
etc/cni/net.d/10-terway.conflistpada node.
Kasus penggunaan
Konfigurasikan portmap
Plug-in portmap digunakan untuk memetakan port internal Pod ke port host, sehingga Pod dapat mengekspos layanan tertentu agar dapat diakses dari luar.
Jika Anda memerlukan akses jaringan publik, pastikan aturan masuk security group dikonfigurasi untuk mengizinkan lalu lintas pada port yang sesuai.
Aturan tersebut mungkin tidak kompatibel dengan kebijakan jaringan Kubernetes. Kami menyarankan Anda menguji konfigurasi secara menyeluruh sebelum menerapkannya di lingkungan produksi.
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 akses jaringan publik, konfigurasi berikut diperlukan.
Parameter
Non-Datapath V2
Datapath V2
masqAll
Tidak diperlukan
Diperlukan
symmetric_routing
Diperlukan
Diperlukan
masqAll: Parameter plug-in portmap yang memerlukan portmap v1.7.1 atau lebih baru.
symmetric_routing: Parameter plug-in Terway yang memerlukan Terway v1.15.0 atau lebih baru.
Untuk kluster Datapath V2 dengan pengganti kube-proxy yang diaktifkan, plug-in portmap tidak diperlukan.
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "name": "terway-chain", "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
Di dalam kontainer, meskipun fitur dual-stack IPv6 tidak diaktifkan untuk kluster Anda, antarmuka jaringan kontainer tetap secara otomatis diberi alamat link-local IPv6 dalam subnet fe80::/64 saat dibuat. Ini merupakan perilaku bawaan kernel sistem operasi, yang biasanya tidak berbahaya dan tidak mengganggu operasi bisnis normal.
Namun, jika aplikasi Anda mengalami error saat menangani alamat jaringan, aplikasi tersebut mungkin gagal mengenali alamat link-local IPv6 sebagai alamat IP Pod. Akibatnya, aplikasi mencoba menggunakan alamat link-local IPv6 untuk komunikasi. Karena alamat link-local hanya berlaku untuk komunikasi antar perangkat dalam satu link dan tidak dapat digunakan untuk komunikasi antar jaringan, hal ini dapat menyebabkan exception. Jika kode aplikasi Anda memiliki cacat dalam skenario tersebut, laporkan terlebih dahulu ke vendor aplikasi dan mintalah solusi.
Jika Anda tetap perlu menonaktifkan alamat link-local IPv6 di dalam 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}
}