Membuat penyeimbang beban

Topik ini menunjukkan cara menyiapkan Load Balancer Elastic AWS (ELB) dengan GKE di AWS.

Saat Anda membuat Layanan jenis LoadBalancer, pengontrol GKE di AWS akan mengonfigurasi ELB Klasik atau Jaringan di AWS.

Anda juga dapat mengikuti Panduan Memulai untuk membuat ELB Klasik yang terbuka secara eksternal dari Konsol Google Cloud atau Membuat Load Balancer Aplikasi AWS (ALB).

Sebelum memulai

Sebelum mulai menggunakan GKE di AWS, pastikan Anda telah melakukan tugas berikut:

  • Instal layanan pengelolaan.
  • Buat cluster pengguna.
  • Dari direktori anthos-aws, gunakan anthos-gke untuk mengalihkan konteks ke cluster pengguna.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Ganti CLUSTER_NAME dengan nama cluster pengguna Anda.
  • Menginstal alat command line curl atau alat serupa.

Memilih load balancer eksternal atau internal

GKE di AWS membuat load balancer eksternal (di subnet publik Anda) atau internal (di subnet pribadi Anda) bergantung pada anotasi ke resource LoadBalancer.

Jika Anda memilih load balancer eksternal, load balancer tersebut dapat diakses oleh alamat IP yang diizinkan di grup keamanan kumpulan node dan daftar kontrol akses jaringan (ACL) subnet.

Memilih jenis load balancer

Pilih apakah Anda ingin membuat Load Balancer Klasik (ELB Klasik) atau Load Balancer Jaringan (NLB). Untuk mengetahui informasi lebih lanjut mengenai perbedaan berbagai jenis load balancer, lihat Jenis load balancer dalam dokumentasi AWS.

Membuat LoadBalancer

Anda membuat load balancer dengan membuat deployment dan mengekspos deployment tersebut dengan sebuah layanan.

  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:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-deployment-50001.yaml
    
  3. Pastikan bahwa tiga Pod sedang berjalan:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods --selector=app=products
    
  4. Buat Layanan jenis LoadBalancer untuk deployment Anda. Anda dapat membuat ELB Klasik atau Jaringan di subnet publik atau pribadi Anda. Pilih dari salah satu opsi berikut:

    • ELB Klasik di subnet publik
    • NLB di subnet publik
    • ELB Klasik di subnet pribadi
    • NLB di subnet pribadi

    Kemudian, salin manifes berikut ke file bernama my-lb-service.yaml.

    Publik Klasik

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

    Publik NLB

    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
    

    Pribadi Klasik

    Anda membuat LoadBalancer pribadi 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
    

    NLB Pribadi

    Anda membuat NLB pribadi 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
    
  5. Buat Layanan dengan kubectl apply:

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-lb-service.yaml
    
  6. Lihat nama host Layanan dengan kubectl get service.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get service my-lb-service \
      --output jsonpath="{.status.loadBalancer.ingress..hostname}{'\n'}"
    

    Outputnya akan mirip dengan elb-id.elb.aws-region.amazonaws.com.

  7. Jika telah membuat load balancer yang ditampilkan secara eksternal dan memiliki akses ke subnet VPC publik, Anda dapat terhubung ke load balancer dengan curl. Ganti external-ip dengan IP dari output kubectl get service dari langkah sebelumnya.

    curl external-ip:60000
    

    Outputnya akan terlihat seperti berikut:

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

Pembersihan

Untuk menghapus Layanan dan Deployment, gunakan kubectl delete.

env HTTPS_PROXY=http://localhost:8118 \
  kubectl delete -f my-lb-service.yaml

env HTTPS_PROXY=http://localhost:8118 \
  kubectl delete -f my-deployment-50001.yaml

Pemecahan masalah

Jika Anda tidak dapat mengakses endpoint load balancer, coba beri tag pada subnet Anda.

Langkah Berikutnya