Load balancing jaringan

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

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

Sebelum memulai

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

Memilih load balancer publik atau pribadi

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

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

Memilih subnet untuk load balancer internal

Saat membuat load balancer internal, GKE di Azure harus 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 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:

    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. Anda dapat membuat Load Balancer Standar Azure 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 menetapkan 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-nya akan mencakup kolom EXTERNAL-IP dengan alamat load balancer (baik publik atau 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 Layanan dan Deployment, gunakan kubectl delete.

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