Dokumen ini menjelaskan cara men-deploy arsitektur referensi dalam Mengelola dan menskalakan jaringan untuk aplikasi Windows yang berjalan di Kubernetes terkelola.
Petunjuk ini ditujukan untuk arsitek cloud, administrator jaringan, dan tenaga profesional IT yang bertanggung jawab atas desain dan pengelolaan aplikasi Windows yang berjalan di cluster Google Kubernetes Engine (GKE).
Arsitektur
Diagram berikut menunjukkan arsitektur referensi yang Anda gunakan saat men-deploy aplikasi Windows yang berjalan di cluster GKE terkelola.
Seperti yang ditunjukkan pada diagram sebelumnya, panah mewakili alur kerja untuk mengelola jaringan bagi aplikasi Windows yang berjalan di GKE menggunakan Cloud Service Mesh dan gateway Envoy. Cluster GKE regional mencakup node pool Windows dan Linux. Cloud Service Mesh membuat dan mengelola rute traffic ke Pod Windows.
Tujuan
- Buat dan siapkan cluster GKE untuk menjalankan aplikasi Windows dan proxy Envoy.
- Men-deploy dan memverifikasi aplikasi Windows.
- Konfigurasikan Cloud Service Mesh sebagai bidang kontrol untuk gateway Envoy.
- Gunakan Kubernetes Gateway API untuk menyediakan Load Balancer Aplikasi internal dan mengekspos gateway Envoy.
- Memahami operasi deployment berkelanjutan yang Anda buat.
Biaya
Deployment arsitektur ini menggunakan komponen Google Cloud yang dapat ditagih berikut:
Setelah menyelesaikan deployment ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang dibuat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Shell, and Cloud Service Mesh.
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Jika berjalan di lingkungan Virtual Private Cloud (VPC) bersama, Anda juga harus mengikuti petunjuk untuk membuat subnet khusus proxy dan aturan firewall secara manual untuk pemeriksaan responsivitas Cloud Load Balancing.
Membuat cluster GKE
Gunakan langkah-langkah berikut untuk membuat cluster GKE. Anda menggunakan cluster GKE untuk menyimpan dan menjalankan aplikasi Windows dan proxy Envoy dalam deployment ini.
Di Cloud Shell, jalankan perintah Google Cloud CLI berikut untuk membuat cluster GKE regional dengan satu node di setiap tiga region:
gcloud container clusters create my-cluster --enable-ip-alias \ --num-nodes=1 \ --release-channel stable \ --enable-dataplane-v2 \ --region us-central1 \ --scopes=cloud-platform \ --gateway-api=standard
Tambahkan node pool Windows ke cluster GKE:
gcloud container node-pools create win-pool \ --cluster=my-cluster \ --image-type=windows_ltsc_containerd \ --no-enable-autoupgrade \ --region=us-central1 \ --num-nodes=1 \ --machine-type=n1-standard-2 \ --windows-os-version=ltsc2019
Penyelesaian operasi ini mungkin memerlukan waktu sekitar 20 menit.
Simpan project ID Google Cloud Anda dalam variabel lingkungan:
export PROJECT_ID=$(gcloud config get project)
Hubungkan ke cluster GKE
gcloud container clusters get-credentials my-cluster --region us-central1
Cantumkan semua node di cluster GKE:
kubectl get nodes
Output akan menampilkan tiga node Linux dan tiga node Windows.
Setelah cluster GKE siap, Anda dapat men-deploy dua aplikasi pengujian berbasis Windows.
Men-deploy dua aplikasi pengujian
Di bagian ini, Anda akan men-deploy dua aplikasi pengujian berbasis Windows. Kedua aplikasi pengujian mencetak nama host tempat aplikasi berjalan. Anda juga membuat Layanan Kubernetes untuk mengekspos aplikasi melalui grup endpoint jaringan mandiri (NEG).
Saat Anda men-deploy aplikasi berbasis Windows dan Layanan Kubernetes di cluster regional, tindakan ini akan membuat NEG untuk setiap zona tempat aplikasi berjalan. Selanjutnya, panduan deployment ini akan membahas cara mengonfigurasi NEG ini sebagai backend untuk layanan Cloud Service Mesh.
Di Cloud Shell, terapkan file YAML berikut dengan
kubectl
untuk men-deploy aplikasi pengujian pertama. Perintah ini men-deploy tiga instance aplikasi pengujian, satu di setiap zona regional.apiVersion: apps/v1 kind: Deployment metadata: labels: app: win-webserver-1 name: win-webserver-1 spec: replicas: 3 selector: matchLabels: app: win-webserver-1 template: metadata: labels: app: win-webserver-1 name: win-webserver-1 spec: containers: - name: windowswebserver image: k8s.gcr.io/e2e-test-images/agnhost:2.36 command: ["/agnhost"] args: ["netexec", "--http-port", "80"] topologySpreadConstraints: - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: win-webserver-1 nodeSelector: kubernetes.io/os: windows
Terapkan Layanan Kubernetes yang cocok dan ekspos dengan NEG:
apiVersion: v1 kind: Service metadata: name: win-webserver-1 annotations: cloud.google.com/neg: '{"exposed_ports": {"80":{"name": "win-webserver-1"}}}' spec: type: ClusterIP selector: app: win-webserver-1 ports: - name: http protocol: TCP port: 80 targetPort: 80
Verifikasi deployment:
kubectl get pods
Output menunjukkan bahwa aplikasi memiliki tiga Pod Windows yang sedang berjalan.
NAME READY STATUS RESTARTS AGE win-webserver-1-7bb4c57f6d-hnpgd 1/1 Running 0 5m58s win-webserver-1-7bb4c57f6d-rgqsb 1/1 Running 0 5m58s win-webserver-1-7bb4c57f6d-xp7ww 1/1 Running 0 5m58s
Pastikan Layanan Kubernetes telah dibuat:
$ kubectl get svc
Outputnya akan terlihat seperti berikut:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.64.0.1
443/TCP 58m win-webserver-1 ClusterIP 10.64.6.20 80/TCP 3m35s Jalankan perintah
describe
untukkubectl
guna memverifikasi bahwa NEG yang sesuai dibuat untuk Layanan Kubernetes di setiap zona tempat aplikasi berjalan:$ kubectl describe service win-webserver-1
Outputnya akan terlihat seperti berikut:
Name: win-webserver-1 Namespace: default Labels:
Annotations: cloud.google.com/neg: {"exposed_ports": {"80":{"name": "win-webserver-1"}}} cloud.google.com/neg-status: {"network_endpoint_groups":{"80":"win-webserver-1"},"zones":["us-central1-a","us-central1-b","us-central1-c"]} Selector: app=win-webserver-1 Type: ClusterIP IP Family Policy: SingleStack IP Families: IPv4 IP: 10.64.6.20 IPs: 10.64.6.20 Port: http 80/TCP TargetPort: 80/TCP Endpoints: 10.60.3.5:80,10.60.4.5:80,10.60.5.5:80 Session Affinity: None Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Create 4m25s neg-controller Created NEG "win-webserver-1" for default/win-webserver-1-win-webserver-1-http/80-80-GCE_VM_IP_PORT-L7 in "us-central1-a". Normal Create 4m18s neg-controller Created NEG "win-webserver-1" for default/win-webserver-1-win-webserver-1-http/80-80-GCE_VM_IP_PORT-L7 in "us-central1-b". Normal Create 4m11s neg-controller Created NEG "win-webserver-1" for default/win-webserver-1-win-webserver-1-http/80-80-GCE_VM_IP_PORT-L7 in "us-central1-c". Normal Attach 4m9s neg-controller Attach 1 network endpoint(s) (NEG "win-webserver-1" in zone "us-central1-a") Normal Attach 4m8s neg-controller Attach 1 network endpoint(s) (NEG "win-webserver-1" in zone "us-central1-c") Normal Attach 4m8s neg-controller Attach 1 network endpoint(s) (NEG "win-webserver-1" in zone "us-central1-b") Output dari perintah sebelumnya menunjukkan bahwa NEG dibuat untuk setiap zona.
Opsional: Gunakan gcloud CLI untuk memverifikasi bahwa NEG telah dibuat:
gcloud compute network-endpoint-groups list
Outputnya adalah sebagai berikut:
NAME LOCATION ENDPOINT_TYPE SIZE win-webserver-1 us-central1-a GCE_VM_IP_PORT 1 win-webserver-1 us-central1-b GCE_VM_IP_PORT 1 win-webserver-1 us-central1-c GCE_VM_IP_PORT 1
Untuk men-deploy aplikasi pengujian kedua, terapkan file YAML berikut:
apiVersion: apps/v1 kind: Deployment metadata: labels: app: win-webserver-2 name: win-webserver-2 spec: replicas: 3 selector: matchLabels: app: win-webserver-2 template: metadata: labels: app: win-webserver-2 name: win-webserver-2 spec: containers: - name: windowswebserver image: k8s.gcr.io/e2e-test-images/agnhost:2.36 command: ["/agnhost"] args: ["netexec", "--http-port", "80"] topologySpreadConstraints: - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: win-webserver-2 nodeSelector: kubernetes.io/os: windows
Buat Layanan Kubernetes yang sesuai:
apiVersion: v1 kind: Service metadata: name: win-webserver-2 annotations: cloud.google.com/neg: '{"exposed_ports": {"80":{"name": "win-webserver-2"}}}' spec: type: ClusterIP selector: app: win-webserver-2 ports: - name: http protocol: TCP port: 80 targetPort: 80
Verifikasi deployment aplikasi:
kubectl get pods
Periksa output dan pastikan ada tiga Pod yang berjalan.
Pastikan Layanan Kubernetes dan tiga NEG telah dibuat:
kubectl describe service win-webserver-2
Mengonfigurasi Cloud Service Mesh
Di bagian ini, Cloud Service Mesh dikonfigurasi sebagai bidang kontrol untuk gateway Envoy.
Anda memetakan gateway Envoy ke konfigurasi perutean Cloud Service Mesh yang relevan dengan menentukan parameter scope_name
. Parameter scope_name
memungkinkan Anda mengonfigurasi aturan pemilihan rute yang berbeda untuk gateway
Envoy yang berbeda.
Di Cloud Shell, buat aturan firewall yang mengizinkan traffic masuk dari layanan Google yang memeriksa responsivitas aplikasi:
gcloud compute firewall-rules create allow-health-checks \ --network=default \ --direction=INGRESS \ --action=ALLOW \ --rules=tcp \ --source-ranges="35.191.0.0/16,130.211.0.0/22,209.85.152.0/22,209.85.204.0/22"
Periksa responsivitas aplikasi pertama:
gcloud compute health-checks create http win-app-1-health-check \ --enable-logging \ --request-path="/healthz" \ --use-serving-port
Periksa responsivitas aplikasi kedua:
gcloud compute health-checks create http win-app-2-health-check \ --enable-logging \ --request-path="/healthz" \ --use-serving-port
Buat layanan backend Cloud Service Mesh untuk aplikasi pertama:
gcloud compute backend-services create win-app-1-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --port-name=http \ --health-checks win-app-1-health-check
Buat layanan backend Cloud Service Mesh untuk aplikasi kedua:
gcloud compute backend-services create win-app-2-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --port-name=http \ --health-checks win-app-2-health-check
Tambahkan NEG yang Anda buat sebelumnya. NEG ini dikaitkan dengan aplikasi pertama yang Anda buat sebagai backend untuk layanan backend Cloud Service Mesh. Contoh kode ini menambahkan satu NEG untuk setiap zona di cluster regional yang Anda buat.
BACKEND_SERVICE=win-app-1-service APP1_NEG_NAME=win-webserver-1 MAX_RATE_PER_ENDPOINT=10 gcloud compute backend-services add-backend $BACKEND_SERVICE \ --global \ --network-endpoint-group $APP1_NEG_NAME \ --network-endpoint-group-zone us-central1-b \ --balancing-mode RATE \ --max-rate-per-endpoint $MAX_RATE_PER_ENDPOINT gcloud compute backend-services add-backend $BACKEND_SERVICE \ --global \ --network-endpoint-group $APP1_NEG_NAME \ --network-endpoint-group-zone us-central1-a \ --balancing-mode RATE \ --max-rate-per-endpoint $MAX_RATE_PER_ENDPOINT gcloud compute backend-services add-backend $BACKEND_SERVICE \ --global \ --network-endpoint-group $APP1_NEG_NAME \ --network-endpoint-group-zone us-central1-c \ --balancing-mode RATE \ --max-rate-per-endpoint $MAX_RATE_PER_ENDPOINT
Menambahkan NEG tambahan. NEG ini dikaitkan dengan aplikasi kedua yang Anda buat sebagai backend untuk layanan backend Cloud Service Mesh. Contoh kode ini menambahkan satu NEG untuk setiap zona di cluster regional yang Anda buat.
BACKEND_SERVICE=win-app-2-service APP2_NEG_NAME=win-webserver-2 gcloud compute backend-services add-backend $BACKEND_SERVICE \ --global \ --network-endpoint-group $APP2_NEG_NAME \ --network-endpoint-group-zone us-central1-b \ --balancing-mode RATE \ --max-rate-per-endpoint $MAX_RATE_PER_ENDPOINT gcloud compute backend-services add-backend $BACKEND_SERVICE \ --global \ --network-endpoint-group $APP2_NEG_NAME \ --network-endpoint-group-zone us-central1-a \ --balancing-mode RATE \ --max-rate-per-endpoint $MAX_RATE_PER_ENDPOINT gcloud compute backend-services add-backend $BACKEND_SERVICE \ --global \ --network-endpoint-group $APP2_NEG_NAME \ --network-endpoint-group-zone us-central1-c \ --balancing-mode RATE \ --max-rate-per-endpoint $MAX_RATE_PER_ENDPOINT
Mengonfigurasi resource Cloud Service Mesh tambahan
Setelah mengonfigurasi layanan Cloud Service Mesh, Anda perlu mengonfigurasi dua resource tambahan untuk menyelesaikan penyiapan Cloud Service Mesh.
Pertama, langkah-langkah ini menunjukkan cara mengonfigurasi resource Gateway
. Resource Gateway
adalah resource virtual yang digunakan untuk membuat
aturan perutean Cloud Service Mesh. Aturan pemilihan rute Cloud Service Mesh
digunakan untuk mengonfigurasi proxy Envoy sebagai gateway.
Selanjutnya, langkah-langkah ini menunjukkan cara mengonfigurasi resource
HTTPRoute
untuk setiap layanan backend. Resource HTTPRoute
memetakan permintaan HTTP ke layanan backend yang relevan.
Di Cloud Shell, buat file YAML bernama
gateway.yaml
yang menentukan resourceGateway
:cat <<EOF> gateway.yaml name: gateway80 scope: gateway-proxy ports: - 8080 type: OPEN_MESH EOF
Buat resource
Gateway
dengan memanggil filegateway.yaml
:gcloud network-services gateways import gateway80 \ --source=gateway.yaml \ --location=global
Nama
Gateway
akan menjadiprojects/$PROJECT_ID/locations/global/gateways/gateway80
.Anda menggunakan nama
Gateway
ini saat membuatHTTPRoutes
untuk setiap layanan backend.
Buat HTTPRoutes
untuk setiap layanan backend:
Di Cloud Shell, simpan project ID Google Cloud Anda dalam variabel lingkungan:
export PROJECT_ID=$(gcloud config get project)
Buat file YAML
HTTPRoute
untuk aplikasi pertama:cat <<EOF> win-app-1-route.yaml name: win-app-1-http-route hostnames: - win-app-1 gateways: - projects/$PROJECT_ID/locations/global/gateways/gateway80 rules: - action: destinations: - serviceName: "projects/$PROJECT_ID/locations/global/backendServices/win-app-1-service" EOF
Buat resource
HTTPRoute
untuk aplikasi pertama:gcloud network-services http-routes import win-app-1-http-route \ --source=win-app-1-route.yaml \ --location=global
Buat file YAML
HTTPRoute
untuk aplikasi kedua:cat <<EOF> win-app-2-route.yaml name: win-app-2-http-route hostnames: - win-app-2 gateways: - projects/$PROJECT_ID/locations/global/gateways/gateway80 rules: - action: destinations: - serviceName: "projects/$PROJECT_ID/locations/global/backendServices/win-app-2-service" EOF
Buat resource
HTTPRoute
untuk aplikasi kedua:gcloud network-services http-routes import win-app-2-http-route \ --source=win-app-2-route.yaml \ --location=global
Men-deploy dan mengekspos gateway Envoy
Setelah membuat dua aplikasi pengujian berbasis Windows dan Cloud Service Mesh, Anda akan men-deploy gateway Envoy dengan membuat file YAML deployment. File YAML deployment menyelesaikan tugas berikut:
- Melakukan bootstrap gateway Envoy.
- Mengonfigurasi gateway Envoy untuk menggunakan Cloud Service Mesh sebagai bidang kontrolnya.
- Mengonfigurasi gateway Envoy untuk menggunakan
HTTPRoutes
untuk gateway bernamaGateway80
.
Men-deploy dua gateway Envoy replika. Pendekatan ini membantu membuat gateway fault tolerant dan menyediakan redundansi. Untuk menskalakan gateway Envoy secara otomatis berdasarkan beban, Anda dapat mengonfigurasi Horizontal Pod Autoscaler secara opsional. Jika memutuskan untuk mengonfigurasi Horizontal Pod Autoscaler, Anda harus mengikuti petunjuk di Mengonfigurasi penskalaan otomatis Pod horizontal.
Di Cloud Shell, buat file YAML:
apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: td-envoy-gateway name: td-envoy-gateway spec: replicas: 2 selector: matchLabels: app: td-envoy-gateway template: metadata: creationTimestamp: null labels: app: td-envoy-gateway spec: containers: - name: envoy image: envoyproxy/envoy:v1.21.6 imagePullPolicy: Always resources: limits: cpu: "2" memory: 1Gi requests: cpu: 100m memory: 128Mi env: - name: ENVOY_UID value: "1337" volumeMounts: - mountPath: /etc/envoy name: envoy-bootstrap initContainers: - name: td-bootstrap-writer image: gcr.io/trafficdirector-prod/xds-client-bootstrap-generator imagePullPolicy: Always args: - --project_number='my_project_number' - --scope_name='gateway-proxy' - --envoy_port=8080 - --bootstrap_file_output_path=/var/lib/data/envoy.yaml - --traffic_director_url=trafficdirector.googleapis.com:443 - --expose_stats_port=15005 volumeMounts: - mountPath: /var/lib/data name: envoy-bootstrap volumes: - name: envoy-bootstrap emptyDir: {}
Ganti my_project_number dengan nomor project Anda.
- Anda dapat menemukan nomor project dengan menjalankan perintah berikut:
gcloud projects describe $(gcloud config get project) --format="value(projectNumber)"
Port
15005
digunakan untuk mengekspos endpoint Envoy Admin bernama/stats
. Fitur ini juga digunakan untuk tujuan berikut:- Sebagai endpoint responsivitas dari Load Balancer Aplikasi internal.
- Sebagai cara untuk menggunakan metrik Google Cloud Managed Service for Prometheus dari Envoy.
Saat dua Pod Envoy Gateway berjalan, buat layanan jenis
ClusterIP
untuk mengeksposnya. Anda juga harus membuat file YAML bernamaBackendConfig
.BackendConfig
menentukan pemeriksaan responsivitas non-standar. Pemeriksaan tersebut digunakan untuk memverifikasi responsivitas gateway Envoy.Untuk membuat konfigurasi backend dengan pemeriksaan responsivitas non-standar, buat file YAML bernama
envoy-backendconfig
:apiVersion: cloud.google.com/v1 kind: BackendConfig metadata: name: envoy-backendconfig spec: healthCheck: checkIntervalSec: 5 timeoutSec: 5 healthyThreshold: 2 unhealthyThreshold: 3 type: HTTP requestPath: /stats port: 15005
Pemeriksaan responsivitas akan menggunakan endpoint
/stats
di port15005
untuk terus memeriksa responsivitas gateway Envoy.Buat layanan gateway Envoy:
apiVersion: v1 kind: Service metadata: name: td-envoy-gateway annotations: cloud.google.com/backend-config: '{"default": "envoy-backendconfig"}' spec: type: ClusterIP selector: app: td-envoy-gateway ports: - name: http protocol: TCP port: 8080 targetPort: 8080 - name: stats protocol: TCP port: 15005 targetPort: 15005
Lihat layanan gateway Envoy yang Anda buat:
kubectl get svc td-envoy-gateway
Membuat resource Kubernetes Gateway
Membuat resource Kubernetes Gateway akan menyediakan Load Balancer Aplikasi internal untuk mengekspos gateway Envoy.
Sebelum membuat resource tersebut, Anda harus membuat dua contoh sertifikat yang ditandatangani sendiri, lalu mengimpornya ke cluster GKE sebagai Kubernetes Secrets. Sertifikat ini memungkinkan arsitektur gateway berikut:
- Setiap aplikasi ditayangkan melalui HTTPS.
- Setiap aplikasi menggunakan sertifikat khusus.
Saat menggunakan sertifikat yang dikelola sendiri, Load Balancer Aplikasi internal dapat menggunakan hingga batas maksimum sertifikat untuk mengekspos aplikasi dengan nama domain yang sepenuhnya memenuhi syarat yang berbeda.
Untuk membuat sertifikat, gunakan openssl
.
Di Cloud Shell, buat file konfigurasi untuk sertifikat pertama:
cat <<EOF >CONFIG_FILE [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements prompt = no [extension_requirements] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @sans_list [dn_requirements] 0.organizationName = example commonName = win-webserver-1.example.com [sans_list] DNS.1 = win-webserver-1.example.com EOF
Buat kunci pribadi untuk sertifikat pertama:
openssl genrsa -out sample_private_key 2048
Buat permintaan sertifikat:
openssl req -new -key sample_private_key -out CSR_FILE -config CONFIG_FILE
Tanda tangani dan buat sertifikat pertama:
openssl x509 -req -signkey sample_private_key -in CSR_FILE -out sample.crt -extfile CONFIG_FILE -extensions extension_requirements -days 90
Buat file konfigurasi untuk sertifikat kedua:
cat <<EOF >CONFIG_FILE2 [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements prompt = no [extension_requirements] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @sans_list [dn_requirements] 0.organizationName = example commonName = win-webserver-2.example.com [sans_list] DNS.1 = win-webserver-2.example.com EOF
Buat kunci pribadi untuk sertifikat kedua:
openssl genrsa -out sample_private_key2 2048
Buat permintaan sertifikat:
openssl req -new -key sample_private_key2 -out CSR_FILE2 -config CONFIG_FILE2
Tanda tangani dan buat sertifikat kedua:
openssl x509 -req -signkey sample_private_key2 -in CSR_FILE2 -out sample2.crt -extfile CONFIG_FILE2 -extensions extension_requirements -days 90
Mengimpor sertifikat sebagai Secret Kubernetes
Di bagian ini, Anda akan menyelesaikan tugas berikut:
- Impor sertifikat yang ditandatangani sendiri ke cluster GKE sebagai Kubernetes Secret.
- Buat alamat IP statis untuk VPC internal.
- Buat resource Kubernetes Gateway API.
- Pastikan sertifikat berfungsi.
Di Cloud Shell, impor sertifikat pertama sebagai Secret Kubernetes:
kubectl create secret tls sample-cert --cert sample.crt --key sample_private_key
Impor sertifikat kedua sebagai Secret Kubernetes:
kubectl create secret tls sample-cert-2 --cert sample2.crt --key sample_private_key2
Untuk mengaktifkan Load Balancer Aplikasi internal, buat alamat IP statis di VPC internal:
gcloud compute addresses create sample-ingress-ip --region us-central1 --subnet default
Buat file YAML resource Kubernetes Gateway API:
kind: Gateway apiVersion: gateway.networking.k8s.io/v1beta1 metadata: name: internal-https spec: gatewayClassName: gke-l7-rilb addresses: - type: NamedAddress value: sample-ingress-ip listeners: - name: https protocol: HTTPS port: 443 tls: mode: Terminate certificateRefs: - name: sample-cert - name: sample-cert-2
Secara default, Kubernetes Gateway tidak memiliki rute default. Gateway menampilkan error halaman tidak ditemukan (404) saat permintaan dikirim ke gateway.
Konfigurasikan file YAML
route
default untuk Kubernetes Gateway yang meneruskan semua permintaan masuk ke gateway Envoy:kind: HTTPRoute apiVersion: gateway.networking.k8s.io/v1beta1 metadata: name: envoy-default-backend spec: parentRefs: - kind: Gateway name: internal-https rules: - backendRefs: - name: td-envoy-gateway port: 8080
Verifikasi alur lengkap dengan mengirim permintaan HTTP ke kedua aplikasi. Untuk memverifikasi bahwa gateway Envoy merutekan traffic ke Pod aplikasi yang benar, periksa header Host HTTP.
Temukan dan simpan alamat IP Kubernetes Gateway dalam variabel lingkungan:
export EXTERNAL_IP=$(kubectl get gateway internal-https -o json | jq .status.addresses[0].value -r)
Kirim permintaan ke aplikasi pertama:
curl --insecure -H "Host: win-app-1" https://$EXTERNAL_IP/hostName
Kirim permintaan ke aplikasi kedua:
curl --insecure -H "Host: win-app-2" https://$EXTERNAL_IP/hostName
Pastikan nama host yang ditampilkan dari permintaan cocok dengan Pod yang menjalankan
win-app-1
danwin-app-2
:kubectl get pods
Output akan menampilkan
win-app-1
danwin-app-2
.
Memantau gateway Envoy
Pantau gateway Envoy Anda dengan Google Cloud Managed Service for Prometheus.
Google Cloud Managed Service for Prometheus akan diaktifkan secara default di cluster yang Anda buat sebelumnya.
Di Cloud Shell, buat resource
PodMonitoring
dengan menerapkan file YAML berikut:apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: prom-envoy spec: selector: matchLabels: app: td-envoy-gateway endpoints: - port: 15005 interval: 30s path: /stats/prometheus
Setelah menerapkan file YAML, sistem akan mulai mengumpulkan metrik Google Cloud Managed Service for Prometheus di dasbor.
Untuk membuat dasbor metrik Google Cloud Managed Service for Prometheus, ikuti petunjuk berikut:
- Login ke Konsol Google Cloud.
- Buka menu .
- Klik Operasi > Pemantauan > Dasbor.
Untuk mengimpor dasbor, ikuti petunjuk berikut:
- Di layar Dasbor, klik Sample Library.
- Masukkan envoy di kotak filter.
- Klik Ringkasan Prometheus Envoy Istio.
- Pilih kotak centang.
- Klik Impor, lalu klik Konfirmasi untuk mengimpor dasbor.
Untuk melihat dasbor, ikuti petunjuk berikut:
- Klik Daftar Dasbor.
- Pilih Integrations.
- Klik Istio Envoy Prometheus Overview untuk melihat dasbor.
Sekarang Anda dapat melihat metrik terpenting gateway Envoy. Anda juga dapat mengonfigurasi pemberitahuan berdasarkan kriteria Anda. Sebelum Anda melakukan pembersihan, kirim beberapa permintaan pengujian lagi ke aplikasi dan lihat bagaimana dasbor diperbarui dengan metrik terbaru.
Pembersihan
Agar tidak dikenai biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam deployment ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
- Pelajari lebih lanjut produk Google Cloud yang digunakan dalam panduan deployment ini:
- Untuk mengetahui lebih banyak tentang arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.
Kontributor
Penulis: Eitan Eibschutz | Staff Technical Solutions Consultant
Kontributor lainnya:
- John Laham | Solutions Architect
- Kaslin Fields | Developer Advocate
- Maridi (Raju) Makaraju | Supportability Tech Lead
- Valavan Rajakumar | Key Enterprise Architect
- Victor Moreno | Product Manager, Cloud Networking