Mengonfigurasi jaringan untuk cluster produksi dasar


Tutorial ini ditujukan untuk arsitek cloud dan administrator operasi yang tertarik untuk men-deploy aplikasi web ke cluster Google Kubernetes Engine (GKE) dan mengeksposnya dengan load balancer HTTPS.

Tujuan

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membuat cluster GKE.
  • Membuat alamat IP global dan zona Cloud DNS dengan Terraform.
  • Mengonfigurasi load balancing HTTPS.
  • Men-deploy contoh aplikasi web.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

Menyiapkan project

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Google Kubernetes Engine, Cloud DNS APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Google Kubernetes Engine, Cloud DNS APIs.

    Enable the APIs

    • Anda harus memiliki nama domain. Nama domain tidak boleh lebih dari 63 karakter. Anda dapat menggunakan Google Domains atau registrar lain.

    Menyiapkan lingkungan Anda

    Dalam tutorial ini, Anda akan menggunakan Cloud Shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell telah diinstal sebelumnya dengan software yang Anda perlukan untuk tutorial ini, termasuk Terraform, kubectl, dan gcloud CLI.

    1. Menetapkan variabel lingkungan:

      PROJECT_ID=$(gcloud config get-value project)
      gcloud config set project $PROJECT_ID
      gcloud config set compute/region us-central1
      
    2. Clone repositori kode:

      git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
      
    3. Ubah ke direktori kerja:

      cd kubernetes-engine-samples/autopilot/networking-tutorial
      

    Membuat cluster GKE

    File Terraform berikut membuat cluster GKE:

    
    terraform {
      required_version = "~> 1.3"
    }
    
    provider "google" {}
    
    variable "region" {
      type        = string
      description = "Region where the cluster will be created."
      default     = "us-central1"
    }
    
    variable "cluster_name" {
      type        = string
      description = "Name of the cluster"
      default     = "networking-cluster"
    }
    
    resource "google_container_cluster" "default" {
      name             = var.cluster_name
      description      = "Cluster for sample web application"
      location         = var.region
      enable_autopilot = true
    
      ip_allocation_policy {}
    }
    
    output "region" {
      value       = var.region
      description = "Compute region"
    }
    
    output "cluster_name" {
      value       = google_container_cluster.default.name
      description = "Cluster name"
    }
    

    File Terraform berikut membuat alamat IP global dan zona Cloud DNS:

    
    terraform {
      required_version = "~> 1.3"
    }
    
    variable "base_domain" {
      type        = string
      description = "Your base domain"
    }
    
    variable "name" {
      type        = string
      description = "Name of resources"
      default     = "networking-tutorial"
    }
    
    data "google_client_config" "current" {}
    
    resource "google_compute_global_address" "default" {
      name = var.name
    }
    
    resource "google_dns_managed_zone" "default" {
      name        = var.name
      dns_name    = "${var.name}.${var.base_domain}."
      description = "DNS Zone for web application"
    }
    
    resource "google_dns_record_set" "a" {
      name         = google_dns_managed_zone.default.dns_name
      type         = "A"
      ttl          = 300
      managed_zone = google_dns_managed_zone.default.name
    
      rrdatas = [google_compute_global_address.default.address]
    }
    
    resource "google_dns_record_set" "cname" {
      name         = join(".", compact(["www", google_dns_record_set.a.name]))
      type         = "CNAME"
      ttl          = 300
      managed_zone = google_dns_managed_zone.default.name
    
      rrdatas = [google_dns_record_set.a.name]
    }
    
    output "dns_zone_name_servers" {
      value       = google_dns_managed_zone.default.name_servers
      description = "Write these virtual name servers in your base domain."
    }
    
    output "domain" {
      value = trim(google_dns_record_set.a.name, ".")
    }
    
    1. Lakukan inisialisasi Terraform:

      terraform init
      
    2. Lihat perubahan infrastruktur:

      terraform plan
      

      Saat diminta, masukkan domain Anda, seperti my-domain.net.

    3. Terapkan konfigurasi Terraform:

      terraform apply --auto-approve
      

      Saat diminta, masukkan domain Anda, seperti my-domain.net.

      Output akan mirip dengan yang berikut ini:

      Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
      
      Outputs:
      
      cluster_name = "networking-cluster"
      region = "us-central1"
      

    Membuat Load Balancer Aplikasi eksternal

    1. Manifes berikut menjelaskan ManagedCertificate, FrontendConfig, Deployment, Service, dan Ingress:

      ---
      apiVersion: networking.gke.io/v1
      kind: ManagedCertificate
      metadata:
        name: networking-managed-cert
      spec:
        domains:
          - DOMAIN_NAME
          - www.DOMAIN_NAME
      ---
      apiVersion: networking.gke.io/v1beta1
      kind: FrontendConfig
      metadata:
        name: networking-fc
      spec:
        redirectToHttps:
          enabled: true
          responseCodeName: MOVED_PERMANENTLY_DEFAULT
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: frontend
      spec:
        selector:
          matchLabels:
            app: frontend
        replicas: 2
        template:
          metadata:
            labels:
              app: frontend
          spec:
            containers:
            - name: echo-amd64
              image: us-docker.pkg.dev/google-samples/containers/gke/hello-app-cdn:1.0
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: frontend
      spec:
        type: LoadBalancer
        selector:
          app: frontend
        ports:
        - name: http
          port: 80
          targetPort: 8080
      ---
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: frontend
        annotations:
          networking.gke.io/managed-certificates: networking-managed-cert
          networking.gke.io/v1beta1.FrontendConfig: networking-fc
          kubernetes.io/ingress.global-static-ip-name: networking-tutorial
          kubernetes.io/ingress.class: gce
        labels:
          app: frontend
      spec:
        defaultBackend:
          service:
            name: frontend
            port:
              number: 80

      Ganti DOMAIN_NAME dengan nama domain Anda, seperti my-domain.net.

      Manifes ini memiliki properti berikut:

      • networking.gke.io/managed-certificates: nama ManagedCertificate.
      • networking.gke.io/v1beta1.FrontendConfig: nama resource FrontendConfig.
      • kubernetes.io/ingress.global-static-ip-name: nama alamat IP.
      • kubernetes.io/ingress.class: menginstruksikan pengontrol GKE Ingress untuk membuat Load Balancer Aplikasi eksternal.
    2. Terapkan manifes ke cluster Anda:

      kubectl apply -f kubernetes-manifests.yaml
      
    3. Pastikan Ingress telah dibuat:

      kubectl describe ingress frontend
      

      Output akan mirip dengan yang berikut ini:

      ...
        Events:
          Type    Reason  Age   From                     Message
          ----    ------  ----  ----                     -------
          Normal  ADD     2m    loadbalancer-controller  default/frontend
          Normal  CREATE  1m    loadbalancer-controller  ip: 203.0.113.2
      ...
      

      Diperlukan waktu beberapa menit untuk menyediakan Ingress.

    Aplikasi pengujian

    1. Periksa status sertifikat SSL:

      kubectl get managedcertificates.networking.gke.io networking-managed-cert
      

      Penyediaan sertifikat SSL mungkin memerlukan waktu hingga 30 menit. Output berikut menunjukkan bahwa sertifikat SSL sudah siap:

      NAME                      AGE   STATUS
      networking-managed-cert   28m   Active
      
    2. Jalankan perintah curl:

      curl -Lv https://DOMAIN_NAME
      

      Output akan mirip dengan yang berikut ini:

      *   Trying 34.160.115.33:443...
      * Connected to DOMAIN_NAME (34.160.115.33) port 443 (#0)
      ...
      * TLSv1.3 (IN), TLS handshake, Certificate (11):
      ...
      * Server certificate:
      *  subject: CN=DOMAIN_NAME
      ...
      > Host: DOMAIN_NAME
      

    Pembersihan

    Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

    Menghapus project

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Menghapus resource satu per satu

    1. Hapus resource kubernetes:

      kubectl delete -f kubernetes-manifests.yaml
      
    2. Hapus resource Terraform:

      terraform destroy --auto-approve
      

      Saat diminta, masukkan domain Anda, seperti my-domain.net.

    Langkah berikutnya