Membuat load balancer jaringan

Halaman ini menjelaskan cara menyiapkan load balancer L4 dengan endpoint AWS Elastic Load Balancer (ELB) atau Load Balancer Jaringan (NLB).

Untuk mengetahui informasi selengkapnya tentang jenis load balancer lain yang dapat Anda gunakan dengan GKE di AWS, lihat Ringkasan load balancer.

Sebelum memulai

Memilih jenis load balancer

GKE di AWS membuat load balancer Layanan sebagai Load Balancer Elastis AWS Klasik (ELB Klasik) atau NLB. Secara default, GKE di AWS membuat ELB Klasik. Untuk membuat NLB, tetapkan anotasi service.beta.kubernetes.io/aws-load-balancer-type ke nlb. Untuk mengetahui informasi lebih lanjut tentang perbedaan berbagai jenis load balancer, lihat Jenis load balancer dalam dokumentasi AWS.

Memilih load balancer yang terhubung ke internet atau internal

Load balancer layanan dapat bersifat internal (hanya dapat diakses dalam VPC Anda) atau terhubung ke internet (dengan nama DNS yang dapat di-resolve secara publik).

Secara default, load balancer baru terhubung ke internet. Untuk membuat load balancer internal, tetapkan anotasi service.beta.kubernetes.io/aws-load-balancer-internal ke "true" dalam manifes Anda.

Anda tidak dapat menerapkan anotasi aws-load-balancer-internal ke Layanan yang ada. Untuk mengubah antara konfigurasi antarmuka internet dan internal, Anda harus menghapus dan membuat ulang LoadBalancer yang ada.

Pilih subnet Anda

Saat membuat load balancer, AWS perlu mengetahui subnet tempat load balancer. Secara default, subnet ini otomatis ditemukan dari antara subnet di VPC. Hal ini membutuhkan subnet yang memiliki tag spesifik. Untuk mengetahui detail tentang penemuan dan pemberian tag otomatis subnet, lihat Subnet Load Balancer.

Atau, Anda dapat menentukan subnet load balancer dengan anotasi, dengan menambahkan anotasi service.beta.kubernetes.io/aws-load-balancer-subnets ke Service. Nilai untuk anotasi ini adalah daftar ID subnet atau nama subnet yang dipisahkan koma, misalnya subnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef.

Membuat contoh load balancer

Anda membuat Service jenis LoadBalancer dengan membuat deployment dan mengekspos deployment tersebut dengan Service. Pada contoh berikut, Anda membuat contoh load balancer.

  1. Buat deployment Anda. Container dalam Deployment ini memproses port 50001. Simpan YAML berikut ke file bernama my-deployment-50001.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment-50001
    spec:
      selector:
        matchLabels:
          app: products
          department: sales
      replicas: 3
      template:
        metadata:
          labels:
            app: products
            department: sales
        spec:
          containers:
          - name: hello
            image: "gcr.io/google-samples/hello-app:2.0"
            env:
            - name: "PORT"
              value: "50001"
    
  2. Buat Deployment dengan kubectl apply:

    kubectl apply -f my-deployment-50001.yaml
    
  3. Pastikan bahwa tiga Pod sedang berjalan:

    kubectl get pods --selector=app=products
    
  4. Buat Layanan jenis LoadBalancer untuk deployment Anda.

  5. Tentukan jenis load balancer yang Anda perlukan:

    • ELB Klasik yang terhubung ke internet
    • NLB yang terhubung ke internet
    • ELB Klasik internal
    • NLB internal

    Pilih tab yang cocok dengan persyaratan Anda, lalu salin manifes di dalamnya ke file bernama my-lb-service.yaml.

    Klasik yang terhubung ke internet

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    NLB yang terhubung ke internet

    Anda membuat NLB dengan menetapkan anotasi service.beta.kubernetes.io/aws-load-balancer-type ke nlb. YAML berikut menyertakan anotasi ini.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: nlb
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    Klasik Internal

    Anda membuat LoadBalancer internal dengan menetapkan anotasi service.beta.kubernetes.io/aws-load-balancer-internal ke "true". YAML berikut menyertakan anotasi ini.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    LBB Internal

    Anda membuat NLB internal dengan menyetel anotasi:

    • service.beta.kubernetes.io/aws-load-balancer-internal ke "true"
    • service.beta.kubernetes.io/aws-load-balancer-type ke nlb

    YAML berikut menyertakan kedua anotasi.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-internal: "true"
        service.beta.kubernetes.io/aws-load-balancer-type: nlb
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    
  6. Buat Layanan dengan kubectl apply:

    kubectl apply -f my-lb-service.yaml
    
  7. Lihat alamat Layanan dengan kubectl get service.

    kubectl get service my-lb-service
    

    Output-nya akan mencakup kolom EXTERNAL-IP dengan alamat load balancer (baik publik atau pribadi, bergantung pada cara load balancer dibuat).

  8. Jika telah membuat load balancer yang ditampilkan ke internet, Anda dapat terhubung ke load balancer dengan curl menggunakan perintah berikut:

    curl http://EXTERNAL_IP:60000
    

    Ganti EXTERNAL_IP dengan alamat dari kolom EXTERNAL-IP di langkah sebelumnya.

Outputnya akan terlihat seperti berikut:

```none
Hello, world!
Version: 2.0.0
Hostname: my-deployment-50001-84b6dc5555-zmk7q
```

Pembersihan

Untuk menghapus Layanan dan Deployment, gunakan perintah kubectl delete:

kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml

Langkah berikutnya