Load balancing jaringan

Topik ini menunjukkan cara menyiapkan load balancer L4 yang didukung oleh Azure Standard Load Balancer menggunakan GKE di Azure .

Saat Anda membuat Service jenis LoadBalancer, pengontrol GKE di Azure akan mengonfigurasi Azure Load Balancer.

Sebelum memulai

  • Anda harus Membuat cluster dan mengonfigurasi kubectl untuk mengakses cluster.

Memilih load balancer publik atau pribadi

Load balancer layanan dapat berupa publik — memiliki IP frontend publik — atau internal — hanya dapat diakses melalui IP pribadi.

Secara default, Layanan baru bersifat publik. Untuk membuat load balancer internal, Anda menetapkan anotasi service.beta.kubernetes.io/azure-load-balancer-internal ke "true" dalam manifes.

Memilih subnet untuk load balancer internal

Saat membuat load balancer internal, GKE di Azure perlu memilih subnet untuk menempatkan load balancer. Subnet load balancer layanan default ini dipilih dari parameter pembuatan cluster sebagai berikut:

  1. Jika ditentukan dan tidak kosong, cluster.networking.serviceLoadBalancerSubnetId
  2. Jika tidak, cluster.controlPlane.subnetId

Atau, Anda dapat menentukan subnet yang akan digunakan untuk load balancer tertentu dengan menambahkan anotasi service.beta.kubernetes.io/azure-load-balancer-internal-subnet ke Layanan. Nilai untuk anotasi ini adalah nama subnet.

Membuat contoh 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:

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

    kubectl get pods --selector=app=products
    
  4. Buat Service jenis LoadBalancer untuk deployment Anda. Anda dapat membuat Azure Standard Load Balancer yang bersifat publik atau internal. Pilih salah satu opsi berikut.

    Salin salah satu manifes berikut ke file bernama my-lb-service.yaml.

    Publik

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

    Internal

    Anda membuat LoadBalancer internal dengan menyetel anotasi service.beta.kubernetes.io/azure-load-balancer-internal ke "true". YAML berikut menyertakan anotasi ini. yaml apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001

  5. Buat Layanan dengan kubectl apply:

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

    kubectl get service my-lb-service
    

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

  7. Jika telah membuat load balancer publik, Anda dapat terhubung ke load balancer dengan curl. Ganti external-ip dengan alamat dari output kubectl get service dari langkah sebelumnya.

    curl http://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.

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