Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initialize Network Policy in Bahasa Indonesia. #14287

Merged
merged 1 commit into from
May 18, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
285 changes: 285 additions & 0 deletions content/id/docs/concepts/services-networking/network-policies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,285 @@
---
title: NetworkPolicy
content_template: templates/concept
weight: 50
---

{{< toc >}}

{{% capture overview %}}
Sebuah NetworkPolicy adalah spesifikasi dari sekelompok Pod atau _endpoint_ yang diizinkan untuk saling berkomunikasi.

`NetworkPolicy` menggunakan label untuk memilih Pod serta mendefinisikan serangkaian _rule_ yang digunakan
untuk mendefinisikan trafik yang diizinkan untuk suatu Pod tertentu.

{{% /capture %}}

{{% capture body %}}
## Prasyarat

NetworkPolicy diimplementasikan dengan menggunakan _plugin_ jaringan,
dengan demikian kamu harus memiliki penyedia jaringan yang mendukung `NetworkPolicy` -
membuat _resource_ tanpa adanya _controller_ tidak akan berdampak apa pun.

## Pod yang terisolasi dan tidak terisolasi

Secara _default_, Pod bersifat tidak terisolasi; Pod-Pod tersebut
menerima trafik dari _resource_ apa pun.

Pod menjadi terisolasi apabila terdapat `NetworkPolicy` yang dikenakan pada Pod-Pod tersebut.
Apabila terdapat `NetworkPolicy` di dalam _namespace_ yang dikenakan pada suatu Pod, Pod tersebut
akan menolak koneksi yang tidak diizinkan `NetworkPolicy`. (Pod lain dalam _namespace_
yang tidak dikenakan `NetworkPolicy` akan tetap menerima trafik dari semua _resource_.)

## _Resource_ `NetworkPolicy`

Lihat [`NetworkPolicy`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#networkpolicy-v1-networking-k8s-io) untuk definisi lengkap _resource_.

Sebuah contoh `NetworkPolicy` akan terlihat seperti berikut:

```yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
```
Mengirimkan ini ke API server dengan metode POST tidak akan berdampak apa pun
kecuali penyedia jaringan mendukung network policy.
**_Field-field_ yang bersifat wajib**: Sama dengan seluruh _config_ Kubernetes lainnya, sebuah `NetworkPolicy`
membutuhkan _field-field_ `apiVersion`, `kind`, dan `metadata`. Informasi generik mengenai
bagaimana bekerja dengan _file_ `config`, dapat dilihat di
[Konfigurasi Kontainer menggunakan `ConfigMap`](/docs/tasks/configure-pod-container/configure-pod-configmap/),
serta [Manajemen Objek](/docs/concepts/overview/object-management-kubectl/overview/).

**spec**: `NetworkPolicy` [spec](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status) memiliki semua informasi yang harus diberikan untuk memberikan definisi _network policy_ yang ada pada _namespace_ tertentu.

**podSelector**: Setiap `NetworkPolicy` memiliki sebuah `podSelector` yang bertugas memfilter Pod-Pod yang dikenai _policy_ tersebut. Contoh yang ada memfilter Pod dengan label `"role=db"`. Sebuah `podSelector` yang empty akan memilih semua Pod yang ada di dalam _namespace_.

**policyTypes**: Setiap `NetworkPolicy` memiliki sebuah daftar `policyTypes` yang dapat berupa `Ingress`, `Egress`, atau keduanya. _Field_ `policyTypes` mengindikasikan apakah suatu _policy_ diberikan pada trafik _ingress_, _egress_, atau camputan _ingress_ dan _egress_ pada Pod tertentu. Jika tidak ada `policyTypes` tyang diberikan pada `NetworkPolicy` maka `Ingress` _default_ akan diterapkan dan `Egress` akan diterapkan apabila _policy_ tersebut memberikan spesifikasi _egress_.

**ingress**: Setiap `NetworkPolicy` bisa saja memberikan serangkaian whitelist _rule-rule_ `ingress`. Setiap _rule_ mengizinkan trafik yang sesuai dengan _section_ `from` dan `ports`. Contoh _policy_ yang diberikan memiliki sebuah _rule_, yang sesuai dengan trafik pada sebuah `port` _single_, bagian pertama dispesifikasikan melalui `ipBlock`, yang kedua melalui `namespaceSelector` dan yang ketiga melalui `podSelector`.

**egress**: Setiap `NetworkPolicy` bisa saja meliputi serangkaian _whitelist_ _rule-rule_ `egress`. Setiap _rule_ mengizinkan trafik yang sesuai dengan _section_ `to` dan `ports`. Contoh _policy_ yang diberikan memiliki sebuah _rule_, yang sesuai dengan `port` _single_ pada destinasi `10.0.0.0/24`.

Pada contoh, `NetworkPolicy` melakukan hal berikut:

1. Mengisolasi Pod-Pod dengan label `"role=db"` pada _namespace_ `"default"` baik untuk `ingress` atau `egress`.
2. (_Rule_ `Ingress`) mengizinkan koneksi ke semua Pod pada _namespace_ `“default”` dengan label `“role=db”` untuk protokol TCP `port` `6379` dari:

* semua Pod pada _namespace_ `"default"` dengan label `"role=frontend"`
* semua Pod dalam sebuah _namespace_ dengan label `"project=myproject"`
* alamat IP pada _range_ `172.17.0.0–172.17.0.255` dan `172.17.2.0–172.17.255.255` (yaitu, semua `172.17.0.0/16` kecuali `172.17.1.0/24`)
3. (_Rule_ Egress) mengizinkan koneksi dari semua Pod pada _namespace_ `"default"` dengan label `"role=db"` ke CIDR `10.0.0.0/24` untuk protokol TCP pada `port` `5978`

Lihat mekanisme [Deklarasi _Network Policy_](/docs/tasks/administer-cluster/declare-network-policy/) untuk penjelasan lebih mendalam.

## Perilaku selektor `to` dan `from`

Terdapat empat jenis selektor yang dapat dispesifikasikan dalam `section` `ingress` `from` atau `section` `egress` `to`:

**podSelector**: Ini digunakan untuk memfilter Pod tertentu pada _namespace_ dimana `NetworkPolicy` berada yang akan mengatur destinasi _ingress_ atau _egress_.

**namespaceSelector**: Ini digunakan untuk memfilter _namespace_ tertentu dimana semua Pod diperbolehkan sebagai _source_ `ingress` atau destinasi `egress`.

**namespaceSelector** *and* **podSelector**: Sebuah entri `to`/`from` yang memberikan spesifikasi `namespaceSelector` dan `podSelector` serta memilih Pod-Pod tertentu yang ada di dalam _namespace_. Pastikan kamu menggunakan sintaks YAML yang tepat; `policy` ini:

```yaml
...
ingress:
- from:
- namespaceSelector:
matchLabels:
user: alice
podSelector:
matchLabels:
role: client
...
```

mengandung sebuah elemen `from` yang mengizinkan koneksi dari Pod-Pod dengan label `role=client` di _namespace_ dengan label `user=alice`. Akan tetapi, _policy_ *ini*:

```yaml
...
ingress:
- from:
- namespaceSelector:
matchLabels:
user: alice
- podSelector:
matchLabels:
role: client
...
```

mengandung dua elemen pada _array_ `from`, dan mengizinkan koneksi dari Pod pada Namespace lokal dengan label
`role=client`, *atau* dari Pod di _namespace_ apa pun dengan label `user=alice`.

Ketika kamu merasa ragu, gunakan `kubectl describe` untuk melihat bagaimana Kubernetes
menginterpretasikan _policy_ tersebut.

**ipBlock**: Ini digunakan untuk memilih _range_ IP CIDR tertentu untuk berperan sebagai
_source_ _ingress_ atau destinasi _egress_. Alamat yang digunakan harus merupakan
alamat IP eksternal kluster, karena alamat IP Pod bersifat _ephemeral_ dan tidak dapat ditebak.

Mekanisme _ingress_ dan _egress_ kluster seringkali membutuhkan mekanisme _rewrite_ alamat IP _source_ dan destinasi
paket. Pada kasus-kasus dimana hal ini, tidak dapat dipastikan bahwa apakah hal ini
terjadi sebelum atau setelah pemrosesan `NetworkPolicy`, dan perilaku yang ada mungkin saja berbeda
untuk kombinasi _plugin_ jaringan, penyedia layanan _cloud_, serta implementasi `Service` yang berbeda.

Pada _ingress_, artinya bisa saja kamu melakukan _filter_ paket yang masuk berdasarkan `source IP`,
sementara di kasus lain "source IP" yang digunakan oleh Network Policy adalah alamat IP `LoadBalancer`,
_node_ dimana Pod berada, dsb.

Pada _egress_, bisa saja sebuah koneksi dari Pod ke IP `Service` di-_rewrite_ ke IP eksternal kluster
atau bahkan tidak termasuk di dalam `ipBlock` _policy_.

## _Policy_ _Default_

Secara _default_, jika tidak ada _policy_ yang ada dalam suatu _namespace_, maka semua trafik _ingress_ dan _egress_ yang diizinkan ke atau dari Pod dalam _namespace_.
Contoh di bawah ini akan memberikan gambaran bagaimana kamu dapat mengubah perilaku _default_ pada sebuah _namespace_.

### _Default_: tolak semua trafik _ingress_

Kamu dapat membuat _policy_ isolasi `"default"` untuk sebuah _namespace_
dengan membuat sebuah `NetworkPolicy` yang memilih semua Pod tapi tidak mengizinkan
trafik _ingress_ masuk ke Pod-Pod tersebut.

```yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes:
- Ingress
```

Hal ini menjamin bahwa bahkan Pod yang tidak dipilih oleh `NetworkPolicy` lain masih terisolasi.
_Policy_ ini tidak mengubah perilaku _default_ dari _egress_.

### _Default_: izinkan semua trafik _ingress_

Jika kamu ingin mengizinkan semua trafik _ingress_ pada semua Pod dalam sebuah _namespace_
(bahkan jika _policy_ ditambahkan dan menyebabkan beberapa Pod menjadi terisolasi), kamu
dapat secara eksplisit mengizinkan semua trafik bagi _namespace_ tersebut.

```yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
spec:
podSelector: {}
ingress:
- {}
policyTypes:
- Ingress
```

### _Default_: tolak semua trafik _egress_

Kamu dapat membuat _policy_ isolasi `"default"` untuk sebuah _namespace_
dengan membuat sebuah `NetworkPolicy` yang memilih semua Pod tapi tidak mengizinkan
trafik _egress_ keluar dari Pod-Pod tersebut.

```yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes:
- Egress
```

Hal ini menjamin bahwa bahkan Pod yang tidak dipilih oleh `NetworkPolicy` lain masih terisolasi.
_Policy_ ini tidak mengubah perilaku _default_ dari _ingress_.

### _Default_: izinkan semua trafik _egress_

Jika kamu ingin mengizinkan semua trafik _egress_ pada semua Pod dalam sebuah _namespace_
(bahkan jika _policy_ ditambahkan dan menyebabkan beberapa Pod menjadi terisolasi), kamu
dapat secara eksplisit mengizinkan semua trafik bagi _namespace_ tersebut.

```yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all
spec:
podSelector: {}
egress:
- {}
policyTypes:
- Egress
```

### _Default_: tolak semua trafik _ingress_ dan _egress_

Kamu dapat membuat sebuah _policy_ _"default"_ jika kamu ingin menolak semua trafik _ingress_ maupun _egress_ pada semua Pod dalam sebuah _namespace_.

```yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
```

Hal ini menjamin bahwa bahkan Pod yang tidak dipilih oleh `NetworkPolicy` tidak akan mengizinkan trafik _ingress_ atau _egress_.

## Dukungan terhadap SCTP

{{< feature-state for_k8s_version="v1.12" state="alpha" >}}

Kubernetes mendukung SCTP sebagai _value_ `protocol` pada definisi `NetworkPolicy` sebagai fitur alpha. Untuk mengaktifkan fitur ini, administrator kluster harus mengaktifkan gerbang fitur `SCTPSupport` pada `apiserver`, contohnya `“--feature-gates=SCTPSupport=true,...”`. Ketika gerbang fitur ini diaktifkan, pengguna dapat menerapkan `value` dari _field_ `protocol` pada `NetworkPolicy` menjadi `SCTP`. Kubernetes akan mengatur jaringan sesuai dengan SCTP, seperti halnya koneksi TCP.

_Plugin_ CNI harus mendukung SCTP sebagai _value_ dari `protocol` pada `NetworkPolicy`.


{{% /capture %}}

{{% capture whatsnext %}}

- Lihat [Deklarasi _Network Policy_](/docs/tasks/administer-cluster/declare-network-policy/) untuk melihat lebih banyak contoh penggunaan.
- Baca lebih lanjut soal [panduan](https://github.com/ahmetb/kubernetes-network-policy-recipes) bagi skenario generik _resource_ `NetworkPolicy`.

{{% /capture %}}