Mengonfigurasi nama domain dengan alamat IP statis


Tutorial ini menunjukkan cara menggunakan Google Kubernetes Engine (GKE) untuk mengekspos aplikasi web Anda ke internet pada alamat IP eksternal statis, dan mengonfigurasi nama domain agar mengarah ke aplikasi Anda.

Tutorial ini mengasumsikan bahwa Anda adalah pemilik nama domain yang terdaftar, seperti example.com.

Tujuan

Tutorial ini menunjukkan langkah-langkah berikut:

  • Mencadangkan alamat IP eksternal statis untuk aplikasi Anda
  • Konfigurasikan resource Service atau Ingress untuk menggunakan alamat IP statis
  • Perbarui data DNS nama domain agar mengarah ke aplikasi Anda

Biaya

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

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud 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

Lakukan langkah-langkah berikut untuk mengaktifkan Kubernetes Engine API:
  1. Buka halaman Kubernetes Engine di Konsol Google Cloud.
  2. Buat atau pilih project.
  3. Tunggu hingga API dan layanan terkait diaktifkan. Proses ini dapat memerlukan waktu beberapa menit.
  4. Make sure that billing is enabled for your Google Cloud project.

Instal alat command line berikut yang digunakan dalam tutorial ini:

  • gcloud digunakan untuk membuat dan menghapus cluster Kubernetes Engine. gcloud disertakan dalam gcloud CLI.
  • kubectl digunakan untuk mengelola Kubernetes, sistem orkestrasi cluster yang digunakan oleh Kubernetes Engine. Anda dapat menginstal kubectl menggunakan gcloud:
    gcloud components install kubectl

Clone kode contoh dari GitHub:

git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
cd kubernetes-engine-samples/quickstarts/hello-app/manifests

Menetapkan default untuk alat command line gcloud

Untuk menghemat waktu saat mengetik opsi project ID dan Zona Compute Engine di alat command line gcloud, Anda dapat menetapkan setelan default:
gcloud config set project project-id
gcloud config set compute/zone compute-zone

Membuat cluster

Membuat cluster:

gcloud container clusters create-auto domain-test

Men-deploy aplikasi web Anda

Manifes berikut menjelaskan Deployment yang menjalankan image container aplikasi web contoh:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
      tier: web
  template:
    metadata:
      labels:
        app: hello
        tier: web
    spec:
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: 200m

Membuat Deployment:

kubectl apply -f helloweb-deployment.yaml

Mengekspos aplikasi

Anda dapat mengekspos aplikasi Anda di GKE menggunakan salah satu metode berikut:

Untuk mempelajari lebih lanjut kelebihan dan kekurangan setiap metode, lihat Menyiapkan Load Balancer Aplikasi eksternal dengan Ingress.

Menggunakan Layanan

Untuk memastikan aplikasi Anda memiliki alamat IP eksternal statis, Anda harus mencadangkan alamat IP statis.

Jika memilih untuk mengekspos aplikasi Anda menggunakan Service, Anda harus membuat alamat IP regional. Alamat IP global hanya berfungsi dengan jenis resource Ingress, seperti yang dijelaskan di bagian berikutnya.

Untuk menggunakan Layanan, buat alamat IP statis bernama helloweb-ip di region us-central1:

gcloud

gcloud compute addresses create helloweb-ip --region us-central1

Temukan alamat IP statis yang Anda buat:

gcloud compute addresses describe helloweb-ip --region us-central1

Outputnya mirip dengan hal berikut ini:

...
address: 203.0.113.32
...

Config Connector

Catatan: Langkah ini memerlukan Config Connector. Ikuti petunjuk penginstalan untuk menginstal Config Connector di cluster Anda.

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: us-central1

Simpan manifes sebagai compute-address-regional.yaml.

Terapkan manifes ke cluster Anda:

  kubectl apply -f compute-address-regional.yaml

Temukan alamat IP statis yang Anda buat:

  kubectl get computeaddress helloweb-ip -o jsonpath='{.spec.address}'

Manifes berikut menjelaskan Service dari jenis LoadBalancer, yang membuat Load Balancer Jaringan passthrough eksternal untuk mengekspos Pod dengan alamat IP eksternal.

Ganti YOUR.IP.ADDRESS.HERE dengan alamat IP statis:

apiVersion: v1
kind: Service
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    app: hello
    tier: web
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer
  loadBalancerIP: "YOUR.IP.ADDRESS.HERE"

Buat Layanan:

kubectl apply -f helloweb-service-static-ip.yaml

Lihat alamat IP yang dicadangkan yang terkait dengan load balancer:

kubectl get service

Outputnya mirip dengan hal berikut ini:

NAME               CLUSTER-IP      EXTERNAL-IP      PORT(S)          AGE
helloweb           10.31.254.176   203.0.113.32     80:30690/TCP     54s

Menggunakan Ingress

Jika memilih untuk mengekspos aplikasi Anda menggunakan Ingress, Anda harus memesan alamat IP statis global. Gunakan anotasi kubernetes.io/ingress.global-static-ip-name untuk menentukan alamat IP global.

Untuk mengekspos aplikasi Anda ke klien dan layanan di suatu region, gunakan alamat IP internal statis regional saat men-deploy resource ingress internal untuk GKE beserta anotasi yang diperlukan.

Untuk mempelajari cara menggunakan Ingress guna mengekspos aplikasi Anda ke internet, lihat Menyiapkan Load Balancer Aplikasi eksternal dengan Ingress.

Untuk membuat alamat IP statis global bernama helloweb-ip:

gcloud

gcloud compute addresses create helloweb-ip --global

Temukan alamat IP statis yang Anda buat:

gcloud compute addresses describe helloweb-ip --global

Outputnya mirip dengan hal berikut ini:

...
address: 203.0.113.32
...

Config Connector

Catatan: Langkah ini memerlukan Config Connector. Ikuti petunjuk penginstalan untuk menginstal Config Connector di cluster Anda.

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeAddress
metadata:
  name: helloweb-ip
spec:
  location: global

Simpan manifes sebagai compute-address-global.yaml.

Terapkan manifes ke cluster Anda:

  kubectl apply -f compute-address-global.yaml

Manifes berikut menjelaskan Ingress yang mengekspos aplikasi web di IP statis dengan dua resource:

  • Service dengan type:NodePort
  • Ingress yang dikonfigurasi dengan nama layanan dan anotasi IP statis
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: helloweb
  annotations:
    kubernetes.io/ingress.global-static-ip-name: helloweb-ip
  labels:
    app: hello
spec:
  defaultBackend:
    service:
      name: helloweb-backend
      port:
        number: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: helloweb-backend
  labels:
    app: hello
spec:
  type: NodePort
  selector:
    app: hello
    tier: web
  ports:
  - port: 8080
    targetPort: 8080

Anotasi kubernetes.io/ingress.global-static-ip-name menentukan nama resource alamat IP global yang akan dikaitkan dengan load balancer.

Terapkan manifes ke cluster Anda:

kubectl apply -f helloweb-ingress-static-ip.yaml

Lihat alamat IP yang terkait dengan load balancer:

kubectl get ingress

Outputnya mirip dengan yang berikut ini

NAME       HOSTS     ADDRESS          PORTS     AGE
helloweb   *         203.0.113.32     80        4m

Melihat alamat IP statis yang dicadangkan

Untuk memverifikasi bahwa load balancer dikonfigurasi dengan benar, Anda dapat menggunakan browser web untuk mengunjungi alamat IP atau menggunakan curl:

curl http://203.0.113.32/

Outputnya mirip dengan hal berikut ini:

Hello, world!
Hostname: helloweb-3766687455-8lvqv

Mengonfigurasi data nama domain Anda

Agar browser yang membuat kueri nama domain Anda, seperti example.com, atau nama subdomain, seperti blog.example.com, mengarah ke alamat IP statis yang Anda cadangkan, Anda harus mengupdate DNS (Domain Name Server) ) nama domain Anda.

Anda harus membuat data DNS jenis A (Address) untuk nama domain atau subdomain, serta mengonfigurasi nilainya dengan alamat IP yang dicadangkan

Data DNS domain Anda dikelola oleh server nama Anda. Server nama Anda mungkin adalah "registrar" tempat Anda mendaftarkan domain, layanan DNS seperti Cloud DNS, atau penyedia pihak ketiga lainnya.

  • Jika server nama Anda adalah Cloud DNS: Ikuti Panduan Memulai Cloud DNS untuk mengonfigurasi data A DNS untuk nama domain Anda dengan alamat IP yang dicadangkan untuk aplikasi Anda.

  • Jika server nama Anda adalah penyedia lain: Lihat dokumentasi penyedia DNS tentang cara menyetel data A DNS untuk mengonfigurasi nama domain. Jika Anda memilih untuk menggunakan Cloud DNS, lihat Bermigrasi ke Cloud DNS.

Mengunjungi nama domain Anda

Untuk memverifikasi bahwa data DNS nama domain Anda ditetapkan ke alamat IP yang Anda cadangkan, kunjungi nama domain Anda.

Untuk membuat kueri DNS untuk data A nama domain Anda, jalankan perintah host:

host example.com

Outputnya mirip dengan hal berikut ini:

example.com has address 203.0.113.32

Sekarang Anda dapat mengarahkan browser web ke nama domain Anda dan mengunjungi situs Anda.

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.

  1. Hapus Service dan Ingress:

    kubectl delete ingress,service -l app=hello
    
  2. Rilis IP statis yang dicadangkan. Setelah load balancer dihapus, alamat IP yang tidak digunakan tetapi dicadangkan akan ditagih sesuai harga alamat IP yang tidak digunakan.

    • Jika Anda menggunakan Layanan:

      gcloud compute addresses delete helloweb-ip --region us-central1
      
    • Jika Anda menggunakan Ingress:

      gcloud compute addresses delete helloweb-ip --global
      
  3. Hapus aplikasi contoh:

    kubectl delete -f helloweb-deployment.yaml
    
  4. Hapus cluster:

    gcloud container clusters delete domain-test
    

Langkah selanjutnya