|
| 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