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.

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

    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