Mengonfigurasi Ingress untuk Load Balancer Aplikasi internal


Halaman ini menunjukkan cara menyiapkan dan menggunakan Ingress untuk Load Balancer Aplikasi internal di Google Kubernetes Engine (GKE). Ingress menyediakan dukungan bawaan untuk load balancing internal melalui pengontrol Ingress GKE.

Untuk mempelajari lebih lanjut fitur yang didukung Ingress untuk Load Balancer Aplikasi internal, lihat Fitur Ingress. Anda juga dapat mempelajari lebih lanjut cara kerja Ingress untuk Load Balancer Aplikasi internal di Ingress untuk Load Balancer Aplikasi internal.

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.

Persyaratan

Ingress untuk Load Balancer Aplikasi internal memiliki persyaratan berikut:

  • Cluster Anda harus menggunakan versi GKE yang lebih baru dari 1.16.5-gke.10.
  • Cluster Anda harus bersifat VPC-native.
  • Cluster Anda harus mengaktifkan add-on HttpLoadBalancing. Add-on ini diaktifkan secara default. Anda tidak boleh menonaktifkannya.
  • Anda harus menggunakan Grup Endpoint Jaringan (NEG) sebagai backend untuk Service Anda.

Men-deploy Ingress untuk Load Balancer Aplikasi internal

Latihan berikut menunjukkan cara men-deploy Ingress untuk Load Balancer Aplikasi internal:

  1. Menyiapkan lingkungan Anda.
  2. Membuat cluster.
  3. Men-deploy aplikasi.
  4. Men-deploy Service.
  5. Men-deploy Ingress.
  6. Memvalidasi deployment.
  7. Menghapus resource Ingress.

Menyiapkan lingkungan Anda

Sebelum dapat men-deploy resource load balancer melalui API Ingress Kubernetes, Anda harus menyiapkan lingkungan jaringan agar proxy load balancer dapat di-deploy di region yang ditentukan.

Buat subnet khusus proxy:

gcloud compute networks subnets create proxy-only-subnet \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=COMPUTE_REGION \
    --network=NETWORK_NAME \
    --range=10.129.0.0/23

Ganti kode berikut:

Untuk mengetahui informasi selengkapnya, lihat mengonfigurasi subnet khusus proxy.

Membuat aturan firewall

Pengontrol Ingress tidak membuat aturan firewall yang mengizinkan koneksi dari proxy load balancer di proxy-subnet. Anda harus membuat aturan firewall ini secara manual. Namun, pengontrol Ingress membuat aturan firewall yang mengizinkan ingress untuk health check Google Cloud.

Buat aturan firewall untuk mengizinkan koneksi dari proxy load balancer di subnet khusus proxy ke port pemrosesan pod:

gcloud compute firewall-rules create allow-proxy-connection \
    --allow=TCP:CONTAINER_PORT \
    --source-ranges=10.129.0.0/23 \
    --network=NETWORK_NAME

Ganti CONTAINER_PORT dengan nilai port yang diproses Pod, seperti 9376.

Membuat cluster

Di bagian ini, Anda akan membuat cluster VPC native yang dapat digunakan dengan Ingress untuk Load Balancer Aplikasi internal. Anda dapat membuat cluster ini menggunakan Google Cloud CLI atau konsol Google Cloud.

gcloud

Buat cluster di jaringan yang sama dengan subnet khusus proxy:

gcloud container clusters create-auto CLUSTER_NAME \
    --location=COMPUTE_LOCATION \
    --network=NETWORK_NAME

Ganti kode berikut:

  • CLUSTER_NAME: nama untuk cluster Anda.
  • COMPUTE_LOCATION: lokasi Compute Engine untuk cluster. Anda harus menggunakan lokasi yang sama dengan proxy-subnet yang Anda buat di bagian sebelumnya.

Konsol

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Klik Create.

  3. Di bagian Autopilot, klik Configure.

  4. Di bagian Cluster basics, selesaikan langkah-langkah berikut:

    1. Masukkan Name untuk cluster Anda.
    2. Untuk Location type, pilih Compute Engine region untuk cluster Anda. Anda harus menggunakan region yang sama dengan proxy-subnet yang Anda buat di bagian sebelumnya.
  5. Di panel navigasi, klik Networking.

  6. Di daftar Network, pilih jaringan tempat Anda ingin membuat cluster. Jaringan ini harus berada di jaringan VPC yang sama dengan proxy-subnet.

  7. Pada daftar Node subnet, pilih subnet proxy yang Anda buat

  8. Klik Create.

Men-deploy aplikasi web

Di bagian ini, Anda akan membuat Deployment.

Untuk membuat Deployment:

  1. Simpan manifes contoh berikut sebagai web-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: hostname
      name: hostname-server
    spec:
      selector:
        matchLabels:
          app: hostname
      minReadySeconds: 60
      replicas: 3
      template:
        metadata:
          labels:
            app: hostname
        spec:
          containers:
          - image: registry.k8s.io/serve_hostname:v1.4
            name: hostname-server
            ports:
            - containerPort: 9376
              protocol: TCP
          terminationGracePeriodSeconds: 90
    

    Manifes ini menjelaskan Deployment yang memproses server HTTPS pada port 9376. Deployment ini juga mengelola Pod untuk aplikasi Anda. Setiap Pod menjalankan satu container aplikasi dengan server HTTPS yang menampilkan nama host server aplikasi sebagai respons. Nama host default Pod adalah nama Pod. Container juga menangani penghentian secara tuntas.

  2. Terapkan manifes ke cluster:

    kubectl apply -f web-deployment.yaml
    

Men-deploy Service sebagai Grup Endpoint Jaringan (NEG)

Di bagian ini, Anda akan membuat resource Service. Service memilih penampung backend berdasarkan labelnya sehingga pengontrol Ingress dapat memprogramnya sebagai endpoint backend. Ingress untuk Load Balancer Aplikasi internal mengharuskan Anda menggunakan NEG sebagai backend. Fitur ini tidak mendukung Grup Instance sebagai backend. Karena backend NEG diperlukan, anotasi NEG berikut diperlukan saat Anda men-deploy Service yang diekspos melalui Ingress:

annotations:
  cloud.google.com/neg: '{"ingress": true}'

Service Anda akan dianotasi otomatis dengan cloud.google.com/neg: '{"ingress": true}' jika semua kondisi berikut terpenuhi:

  • Anda menggunakan cluster VPC native.
  • Anda tidak menggunakan VPC Bersama.
  • Anda tidak menggunakan Kebijakan Jaringan GKE.

Anotasi otomatis ditambahkan menggunakan MutatingWebhookConfiguration dengan nama neg-annotation.config.common-webhooks.networking.gke.io. Anda dapat memeriksa apakah MutatingWebhookConfiguration ada dengan perintah berikut:

kubectl get mutatingwebhookconfigurations

Penggunaan NEG memungkinkan pengontrol Ingress menjalankan load balancing native container. Traffic di-load balance dari proxy Ingress langsung ke IP Pod, bukan melintasi IP node atau jaringan kube-proxy. Selain itu, Gate kesiapan Pod diimplementasikan untuk menentukan kondisi Pod dari perspektif load balancer, dan bukan hanya pemeriksaan kesiapan dan keaktifan Kubernetes. Gate kesiapan Pod memastikan bahwa traffic tidak dihapus selama peristiwa siklus proses, seperti proses memulai Pod, hilangnya Pod, atau hilangnya node.

Jika anotasi NEG tidak disertakan, Anda akan menerima peringatan pada objek Ingress yang mencegah Anda mengonfigurasi Load Balancer Aplikasi internal. Peristiwa Kubernetes juga dibuat di Ingress jika anotasi NEG tidak disertakan. Pesan berikut adalah contoh pesan peristiwa:

Message
-------
error while evaluating the ingress spec: could not find port "8080" in service "default/no-neg-svc"

NEG tidak dibuat hingga Ingress mereferensikan Service. NEG tidak muncul di Compute Engine hingga Ingress dan Service yang direferensikannya ada. NEG adalah resource zona dan untuk cluster multi-zona, satu NEG dibuat per Service per zona.

Untuk membuat Service:

  1. Simpan manifes contoh berikut sebagai web-service.yaml:

    apiVersion: v1
    kind: Service
    metadata:
      name: hostname
      namespace: default
      annotations:
        cloud.google.com/neg: '{"ingress": true}'
    spec:
      ports:
      - name: host1
        port: 80
        protocol: TCP
        targetPort: 9376
      selector:
        app: hostname
      type: ClusterIP
    
  2. Terapkan manifes ke cluster:

    kubectl apply -f web-service.yaml
    

Men-deploy Ingress

Di bagian ini, Anda akan membuat resource Ingress yang memicu deployment load balancer Compute Engine melalui pengontrol Ingress. Ingress untuk Load Balancer Aplikasi internal memerlukan anotasi berikut:

annotations:
    kubernetes.io/ingress.class: "gce-internal"

Anda tidak dapat menggunakan kolom ingressClassName untuk menentukan Ingress GKE. Anda harus menggunakan anotasi kubernetes.io/ingress.class. Untuk informasi selengkapnya, lihat Perilaku pengontrol Ingress GKE.

Untuk membuat Ingress:

  1. Simpan manifes contoh berikut sebagai internal-ingress.yaml:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ilb-demo-ingress
      namespace: default
      annotations:
        kubernetes.io/ingress.class: "gce-internal"
    spec:
      defaultBackend:
        service:
          name: hostname
          port:
            number: 80
    
  2. Terapkan manifes ke cluster:

    kubectl apply -f internal-ingress.yaml
    

Memvalidasi keberhasilan deployment Ingress

Di bagian ini, Anda akan memvalidasi keberhasilan deployment.

Diperlukan waktu beberapa menit hingga resource Ingress disediakan sepenuhnya. Selama waktu ini, pengontrol Ingress membuat item seperti aturan penerusan, layanan backend, peta URL, dan NEG.

Untuk mengambil status resource Ingress yang Anda buat di bagian sebelumnya, jalankan perintah berikut:

kubectl get ingress ilb-demo-ingress

Outputnya mirip dengan hal berikut ini:

NAME               HOSTS    ADDRESS            PORTS     AGE
ilb-demo-ingress   *        10.128.0.58        80        59s

Saat kolom ADDRESS terisi, Ingress sudah siap. Penggunaan alamat RFC 1918 dalam kolom ini menunjukkan IP internal di dalam VPC.

Karena Load Balancer Aplikasi internal adalah load balancer regional, IP virtual (VIP) hanya dapat diakses dari klien di dalam region dan VPC yang sama. Setelah mengambil VIP load balancer, Anda dapat menggunakan alat (misalnya, curl) untuk melakukan panggilan HTTP GET ke VIP dari dalam VPC.

Untuk melakukan panggilan HTTP GET, selesaikan langkah-langkah berikut:

  1. Untuk menjangkau VIP Ingress Anda dari dalam VPC, deploy VM dalam region dan jaringan yang sama dengan cluster:

    gcloud compute instances create l7-ilb-client \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --network=NETWORK_NAME \
        --subnet=SUBNET_NAME \
        --zone=COMPUTE_ZONE \
        --tags=allow-ssh
    

    Ganti kode berikut:

    Untuk mempelajari lebih lanjut cara membuat instance, baca Membuat dan memulai instance VM.

  2. Untuk mengakses VIP internal dari dalam VM, gunakan curl:

    1. Terapkan SSH ke VM yang Anda buat pada langkah sebelumnya:

      gcloud compute ssh l7-ilb-client \
          --zone=COMPUTE_ZONE
      
    2. Gunakan curl untuk mengakses VIP aplikasi internal:

      curl 10.128.0.58
      hostname-server-6696cf5fc8-z4788
      

      Keberhasilan respons HTTP dan nama host salah satu penampung backend menunjukkan bahwa jalur load balancing lengkap berfungsi dengan benar.

Menghapus resource Ingress

Menghapus resource Ingress dan Service juga akan menghapus resource load balancing Compute Engine yang terkait dengannya. Untuk mencegah kebocoran resource, pastikan resource Ingress dihapus saat Anda tidak lagi memerlukannya. Anda juga harus menghapus resource Ingress dan Service sebelum menghapus cluster. Jika tidak, resource load balancing Compute Engine akan menjadi tidak berguna.

Untuk menghapus Ingress, selesaikan langkah-langkah berikut:

  1. Menghapus Ingress. Misalnya, untuk menghapus Ingress yang Anda buat di halaman ini, jalankan perintah berikut:

    kubectl delete ingress ilb-demo-ingress
    

    Menghapus Ingress akan menghapus aturan penerusan, layanan backend, dan peta URL yang terkait dengan resource Ingress ini.

  2. Menghapus Service. Misalnya, untuk menghapus Service yang Anda buat di halaman ini, jalankan perintah berikut:

    kubectl delete service hostname
    

    Menghapus Service akan menghapus NEG yang terkait dengan Service.

Untuk men-deploy aplikasi di GKE dan mengekspos aplikasi tersebut dengan alamat IP pribadi yang di-load balanced, lihat Ingress Internal Dasar.

Alamat IP statis

Resource Ingress internal mendukung penentuan alamat IP statis dan sementara. Jika alamat IP tidak ditentukan, alamat IP yang tersedia akan otomatis dialokasikan dari subnet node GKE. Namun, resource Ingress tidak menyediakan alamat IP dari subnet khusus proxy karena subnet tersebut hanya digunakan untuk pemakaian proxy internal. Alamat IP sementara ini dialokasikan ke Ingress hanya untuk siklus proses resource Ingress internal. Jika menghapus Ingress dan membuat Ingress baru dari file manifes yang sama, Anda tidak dijamin akan mendapatkan alamat IP eksternal yang sama.

Jika menginginkan alamat IP permanen yang tidak bergantung pada siklus proses resource Ingress internal, Anda harus mencadangkan alamat IP internal statis regional. Anda kemudian dapat menentukan alamat IP statis menggunakan anotasi kubernetes.io/ingress.regional-static-ip-name pada resource Ingress.

Contoh berikut menunjukkan cara menambahkan anotasi ini:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.regional-static-ip-name: STATIC_IP_NAME
    kubernetes.io/ingress.class: "gce-internal"

Ganti STATIC_IP_NAME dengan nama IP statis yang memenuhi kriteria berikut:

  • Buat alamat IP statis sebelum men-deploy Ingress. Load balancer tidak melakukan deployment hingga IP statis ada, dan mereferensikan resource alamat IP yang tidak ada tidak akan menciptakan IP statis. Jika Anda memodifikasi Ingress yang sudah ada untuk menggunakan alamat IP statis dan bukan alamat IP sementara, GKE dapat mengubah alamat IP load balancer saat GKE membuat ulang aturan penerusan load balancer.
  • IP statis direservasi di project layanan untuk Ingress yang di-deploy dalam project layanan VPC Bersama.
  • Referensikan resource alamat IP Google Cloud berdasarkan namanya, bukan alamat IP-nya.
  • Alamat IP harus berasal dari subnet di region yang sama dengan cluster GKE. Anda dapat menggunakan subnet pribadi yang tersedia dalam region tersebut (dengan pengecualian subnet khusus proxy). Resource Ingress yang berbeda juga dapat memiliki alamat dari subnet yang berbeda.

HTTPS antara klien dan load balancer

Ingress untuk load balancing internal mendukung penyaluran sertifikat TLS ke klien. Anda dapat menyalurkan sertifikat TLS melalui Kubernetes Secrets atau melalui sertifikat SSL regional yang telah dibagikan di Google Cloud. Anda juga dapat menentukan beberapa sertifikat per resource Ingress. Penggunaan HTTPS dan HTTP secara bersamaan didukung untuk GKE 1.25+. Untuk mengaktifkan fitur ini, Anda perlu membuat alamat IP statis dengan PURPOSE=SHARED_LOAD pentingR_VIP, dan mengonfigurasinya pada traffic masuk. Jika alamat IP statis tidak disediakan, hanya traffic HTTPS yang diizinkan, dan Anda harus mengikuti dokumentasi untuk Menonaktifkan HTTP.

Langkah-langkah berikut menjelaskan cara membuat sertifikat di Google Cloud, lalu menyalurkannya melalui Ingress ke klien internal untuk traffic HTTPS dan HTTP:

  1. Buat sertifikat regional:

    gcloud compute ssl-certificates create CERT_NAME \
        --certificate CERT_FILE_PATH \
        --private-key KEY_FILE_PATH \
        --region COMPUTE_REGION
    

    Ganti kode berikut:

    • CERT_NAME: nama untuk sertifikat yang Anda pilih.
    • CERT_FILE_PATH: jalur ke file sertifikat lokal Anda untuk membuat sertifikat yang dikelola sendiri. Sertifikat harus dalam format PEM.
    • KEY_FILE_PATH: jalur ke file kunci pribadi lokal. Kunci pribadi harus dalam format PEM dan harus menggunakan enkripsi RSA atau ECDSA.
    • COMPUTE_REGION: region Compute Engine untuk sertifikat Anda.
  2. Cadangkan dan terapkan alamat IP statis setelah pengalamatan IP Statis.

  3. Simpan manifes contoh berikut sebagai ingress-pre-shared-cert.yaml:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ilb-demo-ing
      namespace: default
      annotations:
        ingress.gcp.kubernetes.io/pre-shared-cert: "CERT_NAME"
        kubernetes.io/ingress.regional-static-ip-name: STATIC_IP_NAME
        kubernetes.io/ingress.class: "gce-internal"
    spec:
      rules:
      - host: DOMAIN
        http:
          paths:
          - pathType: ImplementationSpecific
            backend:
              service:
                name: SERVICE_NAME
                port:
                  number: 80
    

    Ganti kode berikut:

    • DOMAIN: domain Anda.
    • CERT_NAME: nama sertifikat yang Anda buat di bagian sebelumnya.
    • SERVICE_NAME: Nama Service Anda.
  4. Terapkan manifes ke cluster:

    kubectl apply -f ingress-pre-shared-cert.yaml
    

HTTPS antara load balancer dan aplikasi

Jika aplikasi berjalan di Pod GKE dan dapat menerima permintaan HTTPS, Anda dapat mengonfigurasi load balancer untuk menggunakan HTTPS saat meneruskan permintaan ke aplikasi Anda. Untuk informasi selengkapnya, lihat HTTPS (TLS) antara load balancer dan aplikasi.

VPC Bersama

Menambahkan anotasi NEG secara manual

Jika GKE tempat Anda men-deploy resource Ingress berada dalam project layanan VPC Bersama, layanan tersebut tidak secara otomatis dianotasi dengan anotasi cloud.google.com/neg: '{"ingress": true}' karena MutatingWebhookConfiguration yang bertanggung jawab untuk memasukkan anotasi ke layanan tidak diinstal.

Anda harus menambahkan anotasi NEG ke manifes Service yang ditampilkan melalui Ingress untuk Load Balancer Aplikasi internal.

Aturan firewall VPC

Jika cluster GKE tempat Anda men-deploy resource Ingress berada dalam project layanan VPC Bersama, dan Anda ingin agar bidang kontrol GKE mengelola resource firewall di project host, akun layanan GKE project layanan harus diberi izin IAM yang sesuai di project host sesuai dengan Mengelola resource firewall untuk cluster dengan VPC Bersama. Dengan begitu, pengontrol Ingress dapat membuat aturan firewall yang mengizinkan traffic Ingress untuk health check Google Cloud.

Berikut contoh peristiwa yang mungkin ada dalam log resource Ingress. Error ini terjadi saat pengontrol Ingress tidak dapat membuat aturan firewall guna mengizinkan traffic masuk untuk health check Google Cloud jika izin tidak dikonfigurasi dengan benar.

Firewall change required by security admin: `gcloud compute firewall-rules update <RULE_NAME> --description "GCE L7 firewall rule" --allow tcp:<PORT> --source-ranges 130.211.0.0/22,35.191.0.0/16 --target-tags <TARGET_TAG> --project <HOST_PROJECT>

Jika memilih untuk menyediakan aturan firewall secara manual dari project host, Anda dapat membisukan peristiwa firewallXPNError dengan menambahkan anotasi networking.gke.io/suppress-firewall-xpn-error: "true" ke resource Ingress.

Ringkasan anotasi Ingress internal

Tabel berikut menunjukkan anotasi yang dapat Anda tambahkan saat membuat resource Ingress dan Service untuk Ingress bagi Load Balancer Aplikasi internal.

Anotasi Ingress

Anotasi Deskripsi
kubernetes.io/ingress.class Anda dapat menetapkan sebagai "gce-internal" untuk Ingress internal. Jika class ini tidak ditentukan, resource Ingress akan ditafsirkan secara default sebagai Ingress eksternal. Untuk informasi selengkapnya, lihat Perilaku pengontrol Ingress GKE.
kubernetes.io/ingress.allow-http Anda dapat mengizinkan traffic HTTP antara klien dan load balancer HTTP(S). Nilai yang mungkin adalah true dan false. Nilai defaultnya adalah true. Untuk informasi selengkapnya, lihat Menonaktifkan HTTP.
ingress.gcp.kubernetes.io/pre-shared-cert Anda dapat mengupload sertifikat dan kunci ke project Google Cloud. Gunakan anotasi ini untuk mereferensikan sertifikat dan kunci. Untuk informasi selengkapnya, lihat Menggunakan beberapa sertifikat SSL dengan Load Balancer Aplikasi eksternal.
networking.gke.io/suppress-firewall-xpn-error

Di GLBC 1.4 dan yang lebih baru, Anda dapat menonaktifkan peristiwa firewallXPNError. Untuk Load Balancer Ingress, jika Kubernetes tidak dapat mengubah aturan firewall karena izin tidak memadai, peristiwa firewallXPNError akan dibuat setiap beberapa menit.

Tambahkan anotasi networking.gke.io/suppress-firewall-xpn-error: "true" ke resource ingress. Nilai defaultnya adalah false. Anda dapat menghapus anotasi ini untuk membatalkan penonaktifan.

kubernetes.io/ingress.regional-static-ip-name Anda dapat menentukan alamat IP statis untuk menyediakan resource Ingress internal. Untuk informasi selengkapnya, lihat Alamat IP statis.
Anotasi Deskripsi
cloud.google.com/backend-config Gunakan anotasi ini untuk mengonfigurasi layanan backend yang terkait dengan servicePort. Untuk informasi selengkapnya, lihat Konfigurasi Ingress.
cloud.google.com/neg Gunakan anotasi ini untuk menentukan bahwa load balancer harus menggunakan grup endpoint jaringan. Untuk informasi selengkapnya, lihat Menggunakan Load Balancing berbasis Container.

Pemecahan masalah

Memahami dan mengamati status Ingress biasanya melibatkan pemeriksaan resource terkait. Jenis masalah yang ditemukan sering kali mencakup resource load balancing tidak dibuat dengan benar, traffic tidak menjangkau backend, atau backend tampak tidak responsif.

Beberapa langkah pemecahan masalah umum mencakup:

  • Memverifikasi bahwa traffic klien berasal dari dalam region dan VPC yang sama dengan load balancer.
  • Memverifikasi bahwa Pod dan backend responsif.
  • Memvalidasi jalur traffic ke VIP dan untuk health check Compute Engine guna memastikan jalur tidak diblokir oleh aturan firewall.
  • Memeriksa error di peristiwa resource Ingress.
  • Menjelaskan resource Ingress untuk melihat pemetaan ke resource Compute Engine.
  • Memvalidasi bahwa resource load balancing Compute Engine sudah ada, memiliki konfigurasi yang benar, dan tidak melaporkan error.

Memfilter peristiwa Ingress

Kueri berikut memfilter error di seluruh peristiwa Ingress dalam cluster Anda:

kubectl get events --all-namespaces --field-selector involvedObject.kind=Ingress

Anda juga dapat memfilter berdasarkan objek atau nama objek:

kubectl get events --field-selector involvedObject.kind=Ingress,involvedObject.name=hostname-internal-ingress

Dalam error berikut, Anda dapat melihat bahwa Service yang dirujuk oleh Ingress tidak ada:

LAST SEEN   TYPE      REASON      OBJECT                              MESSAGE
0s          Warning   Translate   ingress/hostname-internal-ingress   error while evaluating the ingress spec: could not find service "default/hostname-invalid"

Memeriksa resource load balancer Compute Engine

Perintah berikut menampilkan output lengkap untuk resource Ingress sehingga Anda dapat melihat pemetaan ke resource Compute Engine yang dibuat oleh pengontrol Ingress:

kubectl get ing INGRESS_FILENAME -o yaml

Ganti INGRESS_FILENAME dengan nama file resource Ingress Anda.

Outputnya mirip dengan hal berikut ini:

apiVersion: v1
items:
- apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    annotations:
      ingress.kubernetes.io/backends: '{"k8s1-241a2b5c-default-hostname-80-29269aa5":"HEALTHY"}'
      ingress.kubernetes.io/forwarding-rule: k8s-fw-default-ilb-demo-ingress--241a2b5c94b353ec
      ingress.kubernetes.io/target-proxy: k8s-tp-default-ilb-demo-ingress--241a2b5c94b353ec
      ingress.kubernetes.io/url-map: k8s-um-default-ilb-demo-ingress--241a2b5c94b353ec
      kubectl.kubernetes.io/last-applied-configuration: |
       {"apiVersion":"networking.k8s.io/v1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.class":"gce-internal"},"name":"ilb-demo-ingress","namespace":"default"},"spec":{"defaultBackend":{"service":{"name":"hostname"},"port":{"number":80}}}}
      kubernetes.io/ingress.class: gce-internal
    creationTimestamp: "2019-10-15T02:16:18Z"
    finalizers:
    - networking.gke.io/ingress-finalizer
    generation: 1
    name: ilb-demo-ingress
    namespace: default
    resourceVersion: "1538072"
    selfLink: /apis/networking.k8s.io/v1/namespaces/default/ingresses/ilb-demo-ingress
    uid: 0ef024fe-6aea-4ee0-85f6-c2578f554975
  spec:
    defaultBackend:
      service:
        name: hostname
        port:
          number: 80
  status:
    loadBalancer:
      ingress:
      - ip: 10.128.0.127
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""

Anotasi ingress.kubernetes.io/backends mencantumkan backend dan statusnya. Pastikan backend Anda tercantum sebagai HEALTHY.

Resource Compute Engine yang dibuat oleh Ingress dapat dikueri langsung untuk memahami status dan konfigurasinya. Menjalankan kueri ini juga dapat membantu saat memecahkan masalah.

Untuk menampilkan daftar semua aturan penerusan Compute Engine:

gcloud compute forwarding-rules list

Output-nya mirip dengan berikut ini:

NAME                                                        REGION       IP_ADDRESS      IP_PROTOCOL  TARGET
k8s-fw-default-hostname-internal-ingress--42084f6a534c335b  REGION_NAME  10.128.15.225   TCP          REGION_NAME/targetHttpProxies/k8s-tp-default-hostname-internal-ingress--42084f6a534c335b

Untuk menampilkan daftar kondisi layanan backend, cantumkan layanan backend terlebih dahulu, lalu buat salinan nama layanan backend yang ingin Anda periksa:

gcloud compute backend-services list

Outputnya mirip dengan hal berikut ini:

NAME                                         BACKENDS                                                                       PROTOCOL
k8s1-42084f6a-default-hostname-80-98cbc1c1   REGION_NAME/networkEndpointGroups/k8s1-42084f6a-default-hostname-80-98cbc1c1 HTTP

Sekarang Anda dapat menggunakan nama layanan backend untuk mengkueri responsnya:

gcloud compute backend-services get-health k8s1-42084f6a-default-hostname-80-98cbc1c1 \
    --region COMPUTE_REGION

Ganti COMPUTE_REGION dengan region Compute Engine dari layanan backend.

Outputnya mirip dengan hal berikut ini:

backend: https://www.googleapis.com/compute/v1/projects/user1-243723/zones/ZONE_NAME/networkEndpointGroups/k8s1-42084f6a-default-hostname-80-98cbc1c1
status:
  healthStatus:
  - healthState: HEALTHY

Langkah selanjutnya