Membuat penyeimbang beban

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

Saat Anda membuat Service 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 menghadap ke luar dari konsol Google Cloud atau Membuat Load Balancer Aplikasi (ALB) AWS.

Sebelum memulai

Sebelum Anda 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 beralih konteks ke cluster pengguna Anda.
    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.
  • Sudah 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 node pool dan daftar kontrol akses (ACL) jaringan subnet.

Memilih jenis load balancer

Pilih apakah Anda ingin membuat Load Balancer Klasik (ELB Klasik) atau Network Load Balancer (NLB). Untuk mengetahui informasi selengkapnya tentang perbedaan antara jenis load balancer, lihat Jenis load balancer dalam dokumentasi AWS.

Membuat LoadBalancer

Anda membuat load balancer dengan membuat deployment dan mengekspos deployment tersebut dengan 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 Service jenis LoadBalancer untuk deployment Anda. Anda dapat membuat ELB Klasik atau Jaringan di subnet publik atau pribadi. 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
    

    NLB Public

    Anda membuat NLB dengan menyetel 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
    

    Privasi Klasik

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

    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 Service 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 terlihat seperti elb-id.elb.aws-region.amazonaws.com.

  7. Jika telah membuat load balancer yang menghadap ke luar 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 Service 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