Skip to content

Commit e88b6ce

Browse files
authored
Merge pull request #21406 from deryrahman/tasks/access-application-cluster/create-external-load-balancer
ID translation for create external load balancer
2 parents 369d10b + 9992812 commit e88b6ce

File tree

1 file changed

+196
-0
lines changed

1 file changed

+196
-0
lines changed
Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
---
2+
title: Membuat Load Balancer Eksternal
3+
content_template: templates/task
4+
weight: 80
5+
---
6+
7+
8+
{{% capture overview %}}
9+
10+
Laman ini menjelaskan bagaimana membuat _Load Balancer_ Eksternal.
11+
12+
{{< note >}}
13+
Fitur ini hanya tersedia untuk penyedia cloud atau lingkungan yang mendukung _load balancer_ eksternal.
14+
{{< /note >}}
15+
16+
Ketika membuat Service, kamu mempunyai opsi untuk tersambung dengan jaringan cloud _load balancer_ secara otomatis.
17+
Hal ini menyediakan akses eksternal alamat IP yang dapat mengirim lalu lintas melalui porta yang tepat pada klaster Node kamu
18+
_asalkan klaster kamu beroperasi pada lingkungan yang mendukung dan terkonfigurasi dengan paket penyedia cloud load balancer yang benar_.
19+
20+
Untuk informasi mengenai penyediaan dan penggunaan sumber daya Ingress yang dapat memberikan
21+
servis URL yang dapat dijangkau secara eksternal, penyeimbang beban lalu lintas, terminasi SSL, dll.,
22+
silahkan cek dokumentasi [Ingress](/docs/concepts/services-networking/ingress/)
23+
24+
{{% /capture %}}
25+
26+
{{% capture prerequisites %}}
27+
28+
* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
29+
30+
{{% /capture %}}
31+
32+
{{% capture steps %}}
33+
34+
## Berkas konfigurasi
35+
36+
Untuk membuat _load balancer_ eksternal, tambahkan baris di bawah ini ke
37+
[berkas konfigurasi Service](/docs/concepts/services-networking/service/#loadbalancer) kamu:
38+
39+
```yaml
40+
type: LoadBalancer
41+
```
42+
43+
Berkas konfigurasi kamu mungkin terlihat seperti ini:
44+
45+
```yaml
46+
apiVersion: v1
47+
kind: Service
48+
metadata:
49+
name: example-service
50+
spec:
51+
selector:
52+
app: example
53+
ports:
54+
- port: 8765
55+
targetPort: 9376
56+
type: LoadBalancer
57+
```
58+
59+
## Menggunakan kubectl
60+
61+
Kamu dapat membuat Service dengan perintah `kubectl expose` dan
62+
_flag_ `--type=LoadBalancer`:
63+
64+
```bash
65+
kubectl expose rc example --port=8765 --target-port=9376 \
66+
--name=example-service --type=LoadBalancer
67+
```
68+
69+
Perintah ini membuat Service baru dengan menggunakan pemilih yang sama dengan
70+
sumber daya yang dirujuk (dalam hal contoh di atas, ReplicationController bernama `example`).
71+
72+
Untuk informasi lebih lanjut, termasuk opsi _flag_, mengacu kepada
73+
[referensi `kubectl expose`](/docs/reference/generated/kubectl/kubectl-commands/#expose).
74+
75+
## Menemukan alamat IP kamu
76+
77+
Kamu dapat menemukan alamat IP yang telah dibuat untuk Service kamu dengan mendapatkan
78+
informasi Service melalui `kubectl`:
79+
80+
```bash
81+
kubectl describe services example-service
82+
```
83+
84+
yang seharusnya menghasilkan keluaran seperti ini:
85+
86+
```bash
87+
Name: example-service
88+
Namespace: default
89+
Labels: <none>
90+
Annotations: <none>
91+
Selector: app=example
92+
Type: LoadBalancer
93+
IP: 10.67.252.103
94+
LoadBalancer Ingress: 192.0.2.89
95+
Port: <unnamed> 80/TCP
96+
NodePort: <unnamed> 32445/TCP
97+
Endpoints: 10.64.0.4:80,10.64.1.5:80,10.64.2.4:80
98+
Session Affinity: None
99+
Events: <none>
100+
```
101+
102+
Alamat IP tercantum di sebelah `LoadBalancer Ingress`.
103+
104+
{{< note >}}
105+
Jika kamu menjalankan Service dari Minikube, kamu dapat menemukan alamat IP dan porta yang ditetapkan dengan:
106+
{{< /note >}}
107+
108+
```bash
109+
minikube service example-service --url
110+
```
111+
112+
## Preservasi IP sumber klien
113+
114+
Implementasi dari fitur ini menyebabkan sumber IP yang terlihat pada Container
115+
target *bukan sebagai sumber IP asli* dari klien. Untuk mengaktifkan
116+
preservasi IP klien, bidang berikut dapat dikonfigurasikan di dalam
117+
spek Service (mendukung lingkungan GCE/Google Kubernetes Engine):
118+
119+
* `service.spec.externalTrafficPolicy` - menunjukkan jika Service menginginkan rute lalu lintas
120+
eksternal ke titik akhir _node-local_ atau _cluster-wide_. Terdapat dua opsi yang tersedia:
121+
`Cluster` (bawaan) dan `Local`. `Cluster` mengaburkan sumber IP klien dan mungkin menyebabkan
122+
hop kedua ke Node berbeda, namun harus mempunyai penyebaran beban (_load-spreading_) yang baik secara keseluruhan.
123+
`Local` mempreservasi sumber IP client dan menghindari hop kedua `LoadBalancer` dan Service dengan tipe `NodePort`, namun
124+
resiko berpotensi penyebaran lalu lintas yang tidak merata.
125+
* `service.spec.healthCheckNodePort` - menentukan pemeriksaan kesehatan porta dari sebuah Node (angka porta numerik) untuk Service.
126+
Jika `healthCheckNodePort` tidak ditentukan, pengendali Service mengalokasi
127+
porta dari rentang `NodePort` dari klaster kamu. Kamu dapat mengonfigurasi
128+
rentangan tersebut dari pengaturan opsi barisan perintah API server,
129+
`--service-node-port-range`. Hal itu menggunakan nilai `healthCheckNodePort` pengguna spesifik
130+
jika ditentukan oleh klien. Hal itu dapat berefek hanya ketika `type` diset ke `LoadBalancer` dan
131+
`externalTrafficPolicy` diset ke `Local`.
132+
133+
Pengaturan `externalTrafficPolicy` ke `Local` pada berkas konfigurasi Service mengaktifkan
134+
fitur ini.
135+
136+
```yaml
137+
apiVersion: v1
138+
kind: Service
139+
metadata:
140+
name: example-service
141+
spec:
142+
selector:
143+
app: example
144+
ports:
145+
- port: 8765
146+
targetPort: 9376
147+
externalTrafficPolicy: Local
148+
type: LoadBalancer
149+
```
150+
151+
## Pengumpul Sampah (Garbage Collector) Load Balancer
152+
153+
{{< feature-state for_k8s_version="v1.17" state="stable" >}}
154+
155+
Pada kasus biasa, sumber daya _load balancer_ yang berkorelasi pada penyedia cloud perlu
156+
dibersihkan segera setelah Service bertipe _LoadBalancer_ dihapus. Namun perlu diketahui
157+
bahwa terdapat kasus tepi dimana sumber daya cloud yatim piatu (_orphaned_) setelah
158+
Service yang berkaitan dihapus. _Finalizer Protection_ untuk Service _LoadBalancer_
159+
diperkenalkan untuk mencegah hal ini terjadi. Dengan menggunakan _finalizers_, sebuah sumber daya Service
160+
tidak akan pernah dihapus hingga sumber daya _load balancer_ yang berkorelasi juga dihapus.
161+
162+
Secara khusus, jika Service mempunyai `type LoadBalancer`, pengendali Service akan melekatkan
163+
_finalizer_ bernama `service.kubernetes.io/load-balancer-cleanup`.
164+
_Finalizer_ hanya akan dihapus setelah sumber daya _load balancer_ dibersihkan.
165+
Hal ini mencegah sumber daya _load balancer_ yang teruntai bahkan setelah kasus tepi seperti
166+
pengendali Service berhenti.
167+
168+
## Penyedia Load Balancer Eksternal
169+
170+
Penting untuk dicatat bahwa jalur data untuk fungsionalitas ini disediakan oleh _load balancer_ eksternal ke klaster Kubernetes.
171+
172+
Ketika Service `type` diset `LoadBalancer`, Kubernetes menyediakan fungsionalitas yang ekuivalen dengan `type` sebanding `ClusterIP`
173+
ke berbagai Pod di dalam klaster dan mengekstensinya dengan pemrograman (eksternal dari Kubernetes) _load balancer_ dengan entri pada Pod
174+
Kubernetes. Pengendali Service Kubernetes mengotomasi pembuatan _load balancer_ eksternal, cek kesehatan (jika dibutuhkan),
175+
dinding api (_firewall_) (jika dibutuhkan), dan mengambil IP eksternal yang dialokasikan oleh penyedia cloud dan mengisinya pada objek Service.
176+
177+
## Peringatan dan and Limitasi ketika preservasi sumber IP
178+
179+
_Load balancers_ GCE/AWS tidak menyediakan bobot pada kolam targetnya (target pools). Hal ini bukan merupakan isu dengan aturan kube-proxy
180+
_Load balancer_ lama yang akan menyeimbangkan semua titik akhir dengan benar.
181+
182+
Dengan fungsionalitas yang baru, lalu lintas eksternal tidak menyeimbangkan beban secara merata pada seluruh Pod, namun
183+
sebaliknya menyeimbangkan secara merata pada level Node (karena GCE/AWS dan implementasi _load balancer_ eksternal lainnya tidak mempunyai
184+
kemampuan untuk menentukan bobot setiap Node, mereka menyeimbangkan secara merata pada semua Node target, mengabaikan jumlah
185+
Pod pada tiap Node).
186+
187+
188+
Namun demikian, kita dapat menyatakan bahwa NumServicePods << NumNodes atau NumServicePods >> NumNodes, distribusi yang cukup mendekati
189+
sama akan terlihat, meski tanpa bobot.
190+
191+
Sekali _load balancer_ eksternal menyediakan bobot, fungsionalitas ini dapat ditambahkan pada jalur pemrograman _load balancer_.
192+
*Pekerjaan Masa Depan: Tidak adanya dukungan untuk bobot yang disediakan untuk rilis 1.4, namun dapat ditambahkan di masa mendatang*
193+
194+
Pod internal ke lalu lintas Pod harus berperilaku sama seperti Service ClusterIP, dengan probabilitas yang sama pada seluruh Pod.
195+
196+
{{% /capture %}}

0 commit comments

Comments
 (0)