Kubernetes v1.17
alpha
alpha
(misalnya, v1alpha1
).Peringatan: Fitur-fitur Alpha berubah dengan cepat.
Plugin jaringan di Kubernetes hadir dalam beberapa varian:
cbr0
sederhana menggunakan plugin bridge
dan host-local
CNIKubelet memiliki plugin jaringan bawaan tunggal, dan jaringan bawaan umum untuk seluruh kluster. Plugin ini memeriksa plugin-plugin ketika dijalankan, mengingat apa yang ditemukannya, dan mengeksekusi plugin yang dipilih pada waktu yang tepat dalam siklus pod (ini hanya berlaku untuk Docker, karena rkt mengelola plugin CNI sendiri). Ada dua parameter perintah Kubelet yang perlu diingat saat menggunakan plugin:
cni-bin-dir
: Kubelet memeriksa direktori ini untuk plugin-plugin saat startupnetwork-plugin
: Plugin jaringan untuk digunakan dari cni-bin-dir
. Ini harus cocok dengan nama yang dilaporkan oleh plugin yang diperiksa dari direktori plugin. Untuk plugin CNI, ini (nilainya) hanyalah “cni”.Selain menyediakan antarmuka NetworkPlugin
untuk mengonfigurasi dan membersihkan jaringan Pod, plugin ini mungkin juga memerlukan dukungan khusus untuk kube-proxy. Proksi iptables jelas tergantung pada iptables, dan plugin ini mungkin perlu memastikan bahwa lalu lintas kontainer tersedia untuk iptables. Misalnya, jika plugin menghubungkan kontainer ke bridge Linux, plugin harus mengatur nilai sysctl net/bridge/bridge-nf-call-iptables
menjadi 1
untuk memastikan bahwa proksi iptables berfungsi dengan benar. Jika plugin ini tidak menggunakan bridge Linux (melainkan sesuatu seperti Open vSwitch atau mekanisme lainnya), plugin ini harus memastikan lalu lintas kontainer dialihkan secara tepat untuk proksi.
Secara bawaan jika tidak ada plugin jaringan Kubelet yang ditentukan, plugin noop
digunakan, yang menetapkan net/bridge/bridge-nf-call-iptables=1
untuk memastikan konfigurasi sederhana (seperti Docker dengan sebuah bridge) bekerja dengan benar dengan proksi iptables.
Plugin CNI dipilih dengan memberikan opsi command-line --network-plugin=cni
pada Kubelet. Kubelet membaca berkas dari --cni-conf-dir
(bawaan /etc/cni/net.d
) dan menggunakan konfigurasi CNI dari berkas tersebut untuk mengatur setiap jaringan Pod. Berkas konfigurasi CNI harus sesuai dengan spesifikasi CNI, dan setiap plugin CNI yang diperlukan oleh konfigurasi harus ada di --cni-bin-dir
(nilai bawaannya adalah /opt/cni/bin
).
Jika ada beberapa berkas konfigurasi CNI dalam direktori, Kubelet menggunakan berkas yang pertama dalam urutan abjad.
Selain plugin CNI yang ditentukan oleh berkas konfigurasi, Kubernetes memerlukan plugin CNI standar lo
plugin , minimal pada versi 0.2.0.
Plugin jaringan CNI mendukung hostPort
. Kamu dapat menggunakan plugin portmap resmi yang ditawarkan oleh tim plugin CNI atau menggunakan plugin kamu sendiri dengan fungsionalitas portMapping.
Jika kamu ingin mengaktifkan dukungan hostPort
, kamu harus menentukan portMappings capability
di cni-conf-dir
kamu.
Contoh:
{
"name": "k8s-pod-network",
"cniVersion": "0.3.0",
"plugins": [
{
"type": "calico",
"log_level": "info",
"datastore_type": "kubernetes",
"nodename": "127.0.0.1",
"ipam": {
"type": "host-local",
"subnet": "usePodCidr"
},
"policy": {
"type": "k8s"
},
"kubernetes": {
"kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
}
},
{
"type": "portmap",
"capabilities": {"portMappings": true}
}
]
}
Plugin jaringan CNI juga mendukung pembentukan lalu-lintas yang masuk dan keluar dari Pod. Kamu dapat menggunakan plugin resmi bandwidth yang ditawarkan oleh tim plugin CNI atau menggunakan plugin kamu sendiri dengan fungsionalitas kontrol bandwidth.
Jika kamu ingin mengaktifkan pembentukan lalu-lintas, kamu harus menambahkan plugin bandwidth
ke berkas konfigurasi CNI kamu (nilai bawaannya adalah /etc/cni/ net.d
).
{
"name": "k8s-pod-network",
"cniVersion": "0.3.0",
"plugins": [
{
"type": "calico",
"log_level": "info",
"datastore_type": "kubernetes",
"nodename": "127.0.0.1",
"ipam": {
"type": "host-local",
"subnet": "usePodCidr"
},
"policy": {
"type": "k8s"
},
"kubernetes": {
"kubeconfig": "/etc/cni/net.d/calico-kubeconfig"
}
},
{
"type": "bandwidth",
"capabilities": {"bandwidth": true}
}
]
}
Sekarang kamu dapat menambahkan anotasi kubernetes.io/ingress-bandwidth
dan kubernetes.io/egress-bandwidth
ke Pod kamu.
Contoh:
apiVersion: v1
kind: Pod
metadata:
annotations:
kubernetes.io/ingress-bandwidth: 1M
kubernetes.io/egress-bandwidth: 1M
...
Kubenet adalah plugin jaringan yang sangat mendasar dan sederhana, hanya untuk Linux. Ia, tidak dengan sendirinya, mengimplementasi fitur-fitur yang lebih canggih seperti jaringan cross-node atau kebijakan jaringan. Ia biasanya digunakan bersamaan dengan penyedia layanan cloud yang menetapkan aturan routing untuk komunikasi antar Node, atau dalam lingkungan Node tunggal.
Kubenet membuat bridge Linux bernama cbr0
dan membuat pasangan veth untuk setiap Pod dengan ujung host dari setiap pasangan yang terhubung ke cbr0
. Ujung Pod dari pasangan diberi alamat IP yang dialokasikan dari rentang yang ditetapkan untuk Node baik melalui konfigurasi atau oleh controller-manager. cbr0
memiliki MTU yang cocok dengan MTU terkecil dari antarmuka normal yang diaktifkan pada host.
Plugin ini memerlukan beberapa hal:
bridge
, lo
dan host-local
standar diperlukan, minimal pada versi 0.2.0. Kubenet pertama-tama akan mencari mereka di /opt/cni/bin
. Tentukan cni-bin-dir
untuk menyediakan lokasi pencarian tambahan. Hasil pencarian pertama akan digunakan.--network-plugin=kubenet
untuk mengaktifkan plugin--non-masquerade-cidr=<clusterCidr>
untuk memastikan lalu-lintas ke IP-IP di luar rentang ini akan menggunakan masquerade IP.--pod-cidr
atau perintah controller-manager --allocate-node-cidrs=true --cluster-cidr=<cidr>
.MTU harus selalu dikonfigurasi dengan benar untuk mendapatkan kinerja jaringan terbaik. Plugin jaringan biasanya akan mencoba membuatkan MTU yang masuk akal, tetapi terkadang logika tidak akan menghasilkan MTU yang optimal. Misalnya, jika bridge Docker atau antarmuka lain memiliki MTU kecil, kubenet saat ini akan memilih MTU tersebut. Atau jika kamu menggunakan enkapsulasi IPSEC, MTU harus dikurangi, dan perhitungan ini di luar cakupan untuk sebagian besar plugin jaringan.
Jika diperlukan, kamu dapat menentukan MTU secara eksplisit dengan opsi network-plugin-mtu
kubelet. Sebagai contoh, pada AWS eth0
MTU biasanya adalah 9001, jadi kamu dapat menentukan --network-plugin-mtu=9001
. Jika kamu menggunakan IPSEC, kamu dapat menguranginya untuk memungkinkan/mendukung overhead enkapsulasi pada IPSEC, contoh: --network-plugin-mtu=8873
.
Opsi ini disediakan untuk plugin jaringan; Saat ini hanya kubenet yang mendukung network-plugin-mtu
.
--network-plugin=cni
menetapkan bahwa kita menggunakan plugin jaringan cni
dengan binary-binary plugin CNI aktual yang terletak di --cni-bin-dir
(nilai bawaannya /opt/cni/bin
) dan konfigurasi plugin CNI yang terletak di --cni-conf-dir
(nilai bawaannya /etc/cni/net.d
).--network-plugin=kubenet
menentukan bahwa kita menggunakan plugin jaringankubenet
dengan bridge
CNI dan plugin-plugin host-local
yang terletak di /opt/cni/bin
atau cni-bin-dir
.--network-plugin-mtu=9001
menentukan MTU yang akan digunakan, saat ini hanya digunakan oleh plugin jaringan kubenet
.Apakah halaman ini berguna?
Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on Stack Overflow. Open an issue in the GitHub repo if you want to report a problem or suggest an improvement.