Membuat load balancer eksternal berbasis layanan backend


Halaman ini menunjukkan cara men-deploy Layanan LoadBalancer eksternal yang membangun Load Balancer Jaringan passthrough eksternal berbasis layanan backend. Sebelum membaca halaman ini, Anda harus memahami konsep berikut:

Load Balancer Jaringan passthrough eksternal berbasis layanan backend

Sebagai administrator cluster, Anda dapat membuat Layanan LoadBalancer eksternal sehingga klien di luar cluster dapat mengirim paket ke Pod Service. Diagram berikut mengilustrasikan dua Load Balancer Jaringan passthrough eksternal berbasis layanan backend yang dibuat untuk dua Layanan LoadBalancer eksternal (store-v1-lb-svc dan store-v2-lb-svc). Kedua load balancer mendistribusikan paket ke node dalam cluster, dan node merutekan paket ke Pod aktif.

Layanan LoadBalancer Eksternal yang didukung oleh Load Balancer Jaringan passthrough eksternal berbasis layanan backend regional

Panduan ini menunjukkan cara menyiapkan Layanan LoadBalancer eksternal bernama store-v1-lb-svc dengan langkah-langkah berikut:

  1. Buat cluster dengan add-on HttpLoadBalancing aktif.
  2. Buat Service yang menyertakan anotasi cloud.go888ogle.com.fqhub.com/l4-rbs. Anotasi ini menginstruksikan GKE untuk membuat Network Load Balancer passthrough eksternal berbasis layanan backend yang menggunakan layanan backend regional.
  3. Verifikasi bahwa load balancer berhasil mengirimkan paket ke Pod Service store-v1-lb-svc. Pastikan juga bahwa GKE membuat komponen Load Balancer Jaringan passthrough eksternal berbasis layanan backend:

    • Aturan penerusan
    • Layanan backend regional
    • Instance group
    • Health check
    • Aturan firewall VPC
  4. Hapus Layanan LoadBalancer eksternal store-v1-lb-svc.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu initialize gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Menyiapkan cluster

Membuat cluster

Gunakan gcloud CLI untuk membuat cluster baru yang mendukung pembuatan Load Balancer Jaringan passthrough eksternal berbasis layanan backend:

gcloud container clusters create-auto CLUSTER_NAME \
    --release-channel=RELEASE_CHANNEL \
    --cluster-version=VERSION \
    --location=COMPUTE_LOCATION

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster baru.
  • RELEASE_CHANNEL: nama saluran rilis GKE untuk cluster.
  • VERSION: versi GKE untuk cluster, yang harus 1.24.9 atau yang lebih baru.
  • COMPUTE_LOCATION: region Compute Engine cluster.

Cluster baru Anda telah mengaktifkan add-on HttpLoadBalancing secara default. Add-on ini diperlukan agar bidang kontrol dapat membuat dan mengelola Load Balancer Jaringan passthrough eksternal berbasis layanan backend.

Mengupgrade cluster yang ada

Gunakan gcloud CLI untuk mengupdate cluster yang ada sehingga dapat mendukung pembuatan Load Balancer Jaringan passthrough eksternal berbasis layanan backend.

  1. Upgrade bidang kontrol Anda ke GKE versi 1.24.9 atau yang lebih baru:

    gcloud container clusters upgrade CLUSTER_NAME \
        --cluster-version=VERSION \
        --master \
        --location=COMPUTE_LOCATION
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda.
    • VERSION: versi GKE, yang harus merupakan versi 1.24.9 atau yang lebih baru. Versi harus berupa versi minor yang valid di saluran rilis cluster Anda. Untuk informasi selengkapnya, lihat Mengupgrade bidang kontrol secara manual.
    • COMPUTE_LOCATION: lokasi Compute Engine untuk cluster baru.

Membuat Layanan LoadBalancer eksternal

  1. Simpan contoh Deployment berikut sebagai store-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: store
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: store
      template:
        metadata:
          labels:
            app: store
        spec:
          containers:
          - image: gcr.io/google_containers/echoserver:1.10
            imagePullPolicy: Always
            name: echoserver
            ports:
              - name: http
                containerPort: 8080
            readinessProbe:
              httpGet:
                path: /healthz
                port: 8080
                scheme: HTTP
    
  2. Terapkan manifes ke cluster:

    kubectl apply -f store-deployment.yaml
    
  3. Pastikan ada dua Pod aktif untuk Deployment:

    kubectl get pods
    

    Outputnya mirip dengan hal berikut ini:

    NAME                     READY   STATUS    RESTARTS   AGE
    store-cdb9bb4d6-s25vw      1/1     Running   0          10s
    store-cdb9bb4d6-vck6s      1/1     Running   0          10s
    
  4. Simpan manifes Service berikut sebagai store-v1-lb-svc.yaml:

    apiVersion: v1
    kind: Service
    metadata:
      name: store-v1-lb-svc
      annotations:
        cloud.go888ogle.com.fqhub.com/l4-rbs: "enabled"
    spec:
      type: LoadBalancer
      externalTrafficPolicy: Cluster
      selector:
        app: store
      ports:
      - name: tcp-port
        protocol: TCP
        port: 8080
        targetPort: 8080
    

    Layanan LoadBalancer eksternal ini menggunakan externalTrafficPolicy default Cluster. Untuk detail cara externalTrafficPolicy menentukan pengelompokan node, node mana yang lulus health check load balancer, dan pemrosesan paket, lihat Konsep Layanan LoadBalancer.

    Jika Anda menggunakan cluster dual-stack IPv4/IPv6, tambahkan spec.ipFamilyPolicy dan ipFamilies untuk menentukan cara GKE mengalokasikan alamat IP ke Service. Pertimbangkan kondisi berikut saat menggunakan spesifikasi ipFamilyPolicy dan ipFamilies:

    • Saat Anda membuat Load Balancer Jaringan passthrough eksternal berbasis layanan backend, GKE otomatis menambahkan anotasi cloud.go888ogle.com.fqhub.com/l4-rbs ke Service baru yang dibuat di cluster dual stack IPv4/IPv6. Namun, jika Anda menambahkan anotasi cloud.go888ogle.com.fqhub.com/l4-rbs: "enabled" ke manifes Service yang sudah ada, Layanan LoadBalancer yang sudah ada di cluster akan tetap menggunakan Load Balancer Jaringan passthrough eksternal berbasis kumpulan target, yang khusus IPv4. Untuk informasi tambahan, lihat Pengelompokan node.
    • GKE dapat mengalokasikan Layanan LoadBalancer satu stack (khusus IPv4 atau IPv6) atau dual-stack. Layanan LoadBalancer dual-stack diimplementasikan dengan dua aturan penerusan Network Load Balancer passthrough eksternal yang terpisah: satu untuk menangani traffic TCP melalui IPv4 dan satu lagi untuk menangani traffic TCP melalui IPv6. Untuk informasi selengkapnya, lihat Service.
  5. Terapkan manifes ke cluster:

    kubectl apply -f store-v1-lb-svc.yaml
    
  6. Pastikan Service Anda berjalan:

    kubectl get svc store-v1-lb-svc
    

    Outputnya mirip dengan hal berikut ini:

    NAME               TYPE           CLUSTER-IP        EXTERNAL-IP     PORT(S)          AGE
    store-v1-lb-svc   LoadBalancer   10.44.196.160     35.193.28.231   8080:32466/TCP   11m
    

    GKE menetapkan EXTERNAL_IP untuk Load Balancer Jaringan passthrough eksternal.

  7. Uji koneksi ke load balancer:

    curl EXTERNAL_IP:PORT
    

    Ganti kode berikut:

    • EXTERNAL_IP: alamat IP yang dialokasikan untuk Load Balancer Jaringan passthrough eksternal.
    • PORT: nomor port yang dialokasikan untuk Load Balancer Jaringan passthrough eksternal.

    Outputnya mirip dengan hal berikut ini:

    Hostname: store-v1-lb-svc-cdb9bb4d6-hflxd
    
    Pod Information:
      -no pod information available-
    
    Server values:
      server_version=nginx: 1.13.3 - lua: 10008
    
    Request Information:
      client_address=10.128.0.50
      method=GET
      real path=/
      query=
      request_version=1.1
      request_scheme=http
      request_uri=EXTERNAL_IP
    
    Request Headers:
      accept=*/*
      host=EXTERNAL_IP
      user-agent=curl/7.81.0
    
    Request Body:
      -no body in request-
    
    

Memverifikasi Layanan LoadBalancer eksternal dan komponennya

  1. Periksa Layanan LoadBalancer dan kumpulan anotasinya yang menjelaskan resource Google Cloud-nya:

    kubectl describe svc store-v1-lb-svc
    

    Outputnya mirip dengan hal berikut ini:

    Name:                     store-v1-lb-svc
    Namespace:                default
    Labels:                   <none>
    Annotations:              cloud.go888ogle.com.fqhub.com/l4-rbs: enabled
                              service.kubernetes.io/backend-service: k8s2-c086604n-default-store-v1-lb-svc-aip4ty1x
                              service.kubernetes.io/firewall-rule: k8s2-c086604n-default-store-v1-lb-svc-aip4ty1x
                              service.kubernetes.io/firewall-rule-for-hc: k8s2-c086604n-l4-shared-hc-fw
                              service.kubernetes.io/healthcheck: k8s2-c086604n-l4-shared-hc
                              service.kubernetes.io/tcp-forwarding-rule: a683373f85bfe433ba929a50ca8d72e2
    Selector:                 app=store
    Type:                     LoadBalancer
    IP Family Policy:         SingleStack
    IP Families:              IPv4
    IP:                       10.44.196.160
    IPs:                      10.44.196.160
    LoadBalancer Ingress:     35.193.28.231
    Port:                     tcp-port  8080/TCP
    TargetPort:               8080/TCP
    NodePort:                 tcp-port  32466/TCP
    Endpoints:                10.48.0.5:8080,10.48.2.8:8080
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:
      Type    Reason                Age                   From                     Message
      ----    ------                ----                  ----                     -------
      Normal  ADD                   2m42s                 loadbalancer-controller  default/store-v1-lb-svc
      Normal  EnsuringLoadBalancer  102s (x2 over 2m42s)  service-controller       Ensuring load balancer
      Normal  Annotations           102s                  loadbalancer-controller  map[cloud.go888ogle.com.fqhub.com/l4-rbs:enabled kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"v1","kind":"Service","metadata":{"annotations":
    {"cloud.go888ogle.com.fqhub.com/l4-rbs":"enabled"},"name":"store-v1-lb-svc","namespace":"default"}
    ,"spec":{"externalTrafficPolicy":"Cluster","ports":
    [{"name":"tcp-port","port":8080,"protocol":"TCP","targetPort":8080}],
    "selector":{"app":"store"},"type":"LoadBalancer"}}
    ] -> map[cloud.go888ogle.com.fqhub.com/l4-rbs:enabled
    kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"v1","kind":
    "Service","metadata":{"annotations":{"cloud.go888ogle.com.fqhub.com/l4-rbs":"enabled"},
    "name":"store-v1-lb-svc","namespace":"default"},"spec":{"externalTrafficPolicy"
    :"Cluster","ports":[{"name":"tcp-port","port":8080,"protocol":"TCP","targetPort"
    :8080}],"selector":{"app":"store"},"type":"LoadBalancer"}}
    service.kubernetes.io/backend-service:k8s2-c086604n-default-store-v1-lb-svc-aip4ty1x
    service.kubernetes.io/firewall-rule:k8s2-c086604n-default-store-v1-lb-svc-aip4ty1x
    service.kubernetes.io/firewall-rule-for-hc:k8s2-c086604n-l4-shared-hc-fw
    service.kubernetes.io/healthcheck:k8s2-c086604n-l4-shared-hc
    service.kubernetes.io/tcp-forwarding-rule:a683373f85bfe433ba929a50ca8d72e2]
    Normal  SyncLoadBalancerSuccessful  16s (x3 over 102s)  loadbalancer-controller  Successfully ensured L4 External LoadBalancer resources
    

    Ada beberapa kolom yang menunjukkan bahwa Load Balancer Jaringan passthrough eksternal berbasis layanan backend dan resource Google Cloud-nya berhasil dibuat:

    • Kolom Events. Kolom ini kosong saat LoadBalancer Service dan resource-nya berhasil dibuat. Jika terjadi, error akan dicantumkan di sini.
    • Daftar Annotations yang diaktifkan: GKE menambahkan daftar anotasi hanya baca berikut ke manifes Service. Setiap anotasi yang namanya diawali dengan service.kubernetes.io/ digunakan untuk menunjukkan nama resource Google Cloud yang dibuat sebagai bagian dari atau untuk mendukung load balancer.

    • Anotasi service.kubernetes.io/backend-service menunjukkan nama layanan backend load balancer.

    • Anotasi service.kubernetes.io/healthcheck menunjukkan nama health check load balancer yang digunakan oleh layanan backend.

    • Anotasi service.kubernetes.io/tcp-forwarding-rule atau service.kubernetes.io/udp-forwarding-rule menunjukkan nama aturan penerusan load balancer.

    • Anotasi service.kubernetes.io/firewall-rule menunjukkan nama aturan firewall yang dibuat untuk mengizinkan traffic ke node cluster. Rentang sumber untuk aturan firewall ini dapat disesuaikan menggunakan spec.loadBalancerSourceRanges[]. Guna mengetahui detail tambahan tentang aturan firewall untuk Layanan LoadBalancer, lihat Aturan firewall dan daftar alamat IP sumber yang diizinkan.

    • Anotasi service.kubernetes.io/firewall-rule-for-hc menunjukkan nama aturan firewall yang diperlukan untuk health check load balancer.

  2. Verifikasi bahwa resource load balancer dan aturan firewall telah dibuat untuk Layanan LoadBalancer eksternal:

  • Untuk melihat aturan penerusan, jalankan perintah berikut:

      gcloud compute forwarding-rules describe FWD_RULE_NAME \
        --region=REGION_NAME
    

    Ganti kode berikut:

    • FWD_RULE_NAME: nama aturan penerusan yang diberikan oleh anotasi hanya baca service.kubernetes.io/tcp-forwarding-rule atau service.kubernetes.io/udp-forwarding-rule. Untuk memeriksa anotasi ini, jalankan kubectl describe svc SERVICE_NAME.
    • REGION_NAME: region Google Cloud yang berisi cluster. Untuk cluster zona, region berisi zona yang digunakan oleh cluster.
  • Untuk melihat layanan backend, jalankan perintah berikut:

    gcloud compute backend-services describe BACKEND_SERVICE_NAME \
      --region=REGION_NAME
    

    Ganti kode berikut:

    • BACKEND_SERVICE_NAME: nama layanan backend yang disediakan oleh anotasi hanya baca service.kubernetes.io/backend-service. Untuk memeriksa anotasi hanya baca ini, jalankan kubectl describe svc SERVICE_NAME.
    • REGION_NAME: region Google Cloud yang berisi cluster. Untuk cluster zona, region berisi zona yang digunakan oleh cluster.
  • Untuk melihat health check load balancer, jalankan perintah berikut:

    gcloud compute health-checks describe HEALTH_CHECK_NAME \
      --region=REGION_NAME
    

    Ganti kode berikut:

    • HEALTH_CHECK_NAME: nama health check load balancer. Nama health check diberikan oleh anotasi hanya baca service.kubernetes.io/healthcheck. Untuk memeriksa anotasi hanya baca ini, jalankan kubectl describe svc SERVICE_NAME.
    • REGION_NAME: region Google Cloud yang berisi cluster. Untuk cluster zona, region berisi zona yang digunakan oleh cluster.
  • Untuk melihat aturan firewall, jalankan perintah berikut:

    gcloud compute firewall-rules describe FIREWALL_RULE_NAME \
    gcloud compute firewall-rules describe HEALTH_CHECK_FIREWALL_RULE_NAME
    

    Ganti kode berikut:

    • FIREWALL_RULE_NAME: nama aturan firewall yang mengizinkan traffic ke load balancer. Nama aturan firewall ini disediakan oleh anotasi hanya baca service.kubernetes.io/firewall-rule. Untuk memeriksa anotasi hanya baca ini, jalankan kubectl describe svc SERVICE_NAME.
    • HEALTH_CHECK_FIREWALL_RULE_NAME: nama aturan firewall yang mengizinkan health check backend load balancer (node cluster). Nama aturan firewall ini disediakan oleh anotasi hanya baca service.kubernetes.io/firewall-rule-for-hc. Untuk memeriksa anotasi hanya baca ini, jalankan kubectl describe svc SERVICE_NAME.

Menghapus Layanan LoadBalancer eksternal dan komponennya

Hapus Layanan LoadBalancer eksternal store-v1-lb-svc.

kubectl delete service store-v1-lb-svc

GKE menghapus resource berikut:

  • Aturan penerusan load balancer.
  • Layanan backend load balancer.
  • Health check load balancer.
  • Aturan firewall VPC yang diperlukan untuk load balancer dan traffic health check-nya.
  • Backend grup instance yang tidak dikelola menurut zona, hanya jika GKE tidak perlu menggunakannya sebagai backend untuk load balancer lain yang dibuat oleh cluster.

Langkah selanjutnya