Skip to content

Commit

Permalink
translate network plugins
Browse files Browse the repository at this point in the history
  • Loading branch information
Bagus Prabangkoro (babang) committed Nov 5, 2019
1 parent 09d2b58 commit e3a2ec0
Show file tree
Hide file tree
Showing 2 changed files with 169 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
title: Compute, Storage, and Networking Extensions
title: Ekstensi Komputasi, Penyimapanan, dan Jaringan
weight: 30
---
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
---
reviewers:
- dcbw
- freehan
- thockin
title: Network Plugins
title: Plugin Jaringan
content_template: templates/concept
weight: 10
---


{{% capture overview %}}

{{< feature-state state="alpha" >}}
{{< warning >}}Fitur-fitur Alpha berubah dengan cepat. {{< /warning >}}

Network plugins in Kubernetes come in a few flavors:
_Plugin_ jaringan di Kubernet datang dalam beberapa varian:

* _Plugin_ CNI : mengikuti spesifikasi appc / CNI, yang dirancang untuk interoperabilitas.
* _Plugin_ Kubenet : mengimplementasikan dasar `cbr0` menggunakan _plugin_ `bridge` dan `host-local` CNI

{{% /capture %}}

{{% capture body %}}

## Instalasi

Kubelet 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 startup
* `network-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 hanyalah "cni".

## Persyaratan Plugin Jaringan

Selain menyediakan [antarmuka `NetworkPlugin`](https://github.com/kubernetes/kubernetes/tree/{{< param "fullversion" >}}/pkg/kubelet/dockershim/network/plugins.go) untuk mengonfigurasi dan bersihkan jaringan Pod, plugin mungkin juga memerlukan dukungan khusus untuk kube-proxy. Proksi _iptables_ jelas tergantung pada _iptables_, dan _plugin_ mungkin perlu memastikan bahwa lalu lintas kontainer tersedia untuk _iptables_. Misalnya, jika plugin menghubungkan kontainer ke Linux _bridge_, _plugin_ harus mengatur `net/bridge/bridge-nf-call-iptables` sysctl ke` 1` untuk memastikan bahwa proksi _iptables_ berfungsi dengan benar. Jika plugin tidak menggunakan Linux _bridge_ (melainkan sesuatu seperti Open vSwitch atau mekanisme lainnya), plugin harus memastikan lalu lintas kontainer dialihkan secara tepat untuk proksi.

Secara standar 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 _bridge_) bekerja dengan benar dengan proksi _iptables_.

### CNI

_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](https://github.com/containernetworking/cni/blob/master/SPEC.md#network-configuration), dan setiap _plugin_ CNI yang diperlukan oleh konfigurasi harus ada di `--cni-bin-dir` (bawaan `/opt/cni/bin`).

Jika ada beberapa berkas konfigurasi CNI dalam direktori, berkas yang digunakan adalah yang pertama dalam urutan abjad.

Selain plugin CNI yang ditentukan oleh berkas konfigurasi, Kubernetes memerlukan CNI standar [`lo`](https://github.com/containernetworking/plugins/blob/master/plugins/main/loopback/loopback.go) _plugin_ , pada versi minimum 0.2.0.

#### Dukungan hostPort

_Plugin_ jaringan CNI mendukung `hostPort`. kamu dapat menggunakan _plugin_ [portmap](https://github.com/containernetworking/plugins/tree/master/plugins/meta/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:

```json
{
"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}
}
]
}
```

#### Dukungan pembentukan lalu-lintas

_Plugin_ jaringan CNI juga mendukung masuknya Pod dan membentuk lalu-lintas keluar. Kamu dapat menggunakan _plugin_ resmi [_bandwidth_](https://github.com/containernetworking/plugins/tree/master/plugins/meta/bandwidth) yang ditawarkan oleh tim _plugin_ CNI atau menggunakan _plugin_ kamu sendiri dengan fungsi kontrol _bandwidth_.

Jika kamu ingin mengaktifkan pembentukan lalu-lintas, kamu harus menambahkan _plugin_ `bandwidth` ke berkas konfigurasi CNI kamu (bawaan `/etc/cni/ net.d`).

```json
{
"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:

```yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
kubernetes.io/ingress-bandwidth: 1M
kubernetes.io/egress-bandwidth: 1M
...
```

### Kubenet

Kubenet adalah _plugin_ jaringan yang sangat mendasar dan sederhana, hanya untuk Linux. Ini sendiri, tidak dengan sendirinya, mengimplementasikan fitur-fitur yang lebih canggih seperti jaringan _cross-node_ atau kebijakan jaringan. Ini biasanya digunakan bersamaan dengan penyedia _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_ memerlukan beberapa hal:

* Diperlukan _plugin_ CNI `bridge`, `lo` dan `host-local` standar, pada versi minimum 0.2.0. Kubenet pertama-tama akan mencari mereka di `/opt/cni/bin`. Tentukan `cni-bin-dir` untuk menyediakan lokasi pencarian tambahan. Hasi pencarian pertama yang akan digunakan.
* Kubelet harus dijalankan dengan argumen `--network-plugin=kubenet` untuk mengaktifkan _plugin_
* Kubelet juga harus dijalankan dengan argumen `--non-masquerade-cidr=<clusterCidr>` untuk memastikan lalu-lintas ke IP di luar rentang ini akan menggunakan IP _masquerade_.
* Node harus diberi subnet IP melalui perintah kubelet `--pod-cidr` atau perintah _controller-manager_ `--allocate-node-cidrs=true --cluster-cidr=<cidr>`.

### Menyesuaikan MTU (dengan kubenet)

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 enkapsulasi, contoh: `--network-plugin-mtu=8873`.

Opsi ini disediakan untuk _plugin_ jaringan; Saat ini **hanya kubenet yang mendukung `network-plugin-mtu`**.

## Ringkasan Penggunaan

* `--network-plugin=cni` menetapkan bahwa kita menggunakan `cni` _plugin_ jaringan dengan _binary-binary plugin_ CNI aktual yang terletak di `--cni-bin-dir` (bawaan `/opt/cni/bin`) dan konfigurasi _plugin_ CNI terletak di `--cni-conf-dir` (bawaan `/etc/cni/net.d`).
* `--network-plugin=kubenet` menentukan bahwa kita menggunakan _plugin_ jaringan` kubenet` dengan CNI `bridge` 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`.

{{% /capture %}}

{{% capture whatsnext %}}

{{% /capture %}}

0 comments on commit e3a2ec0

Please sign in to comment.