Subnet load balancer

Halaman ini menjelaskan cara kerja GKE di AWS dengan AWS guna memilih subnet untuk load balancer Layanan, dan cara memberi tag pada subnet agar ditemukan secara otomatis selama pembuatan load balancer Layanan.

Alasan Anda perlu menentukan subnet

Saat membuat load balancer, AWS perlu mengetahui subnet tempat load balancer. Subnet menentukan zona ketersediaan load balancer, alamat IP, dan endpoint.

Biasanya, load balancer dialokasikan ke satu subnet untuk setiap zona ketersediaan yang berisi satu kumpulan node. AWS membutuhkan minimal satu subnet yang tersedia untuk membuat Load Balancer Jaringan (NLB), dan minimal dua subnet untuk Load Balancer Aplikasi (ALB).

Semua subnet AWS bersifat publik (dengan IP publik dan rute ke gateway internet VPC) atau pribadi (tidak memiliki fitur ini). Load balancing yang terhubung ke internet harus ditempatkan di subnet publik. Load balancer internal dapat berada di subnet publik atau pribadi.

Jika tidak ada subnet yang diberi tag

Jika GKE di AWS perlu membuat load balancer dan tidak ada subnet yang diberi tag yang tersedia atau memiliki kapasitas, GKE dapat membuat load balancer di subnet lain. Untuk menghindari hal ini dan mengontrol subnet tempat load balancer, Anda harus memberi tag pada semua subnet.

Penemuan otomatis subnet

GKE di AWS akan otomatis menemukan subnet yang akan digunakan untuk load balancer dengan mencantumkan semua subnet di VPC, dan memilih hingga satu subnet dari setiap zona ketersediaan.

Agar GKE di AWS dapat menemukan subnet secara otomatis, subnet harus:

  • Diberi tag dengan kubernetes.io/role/elb (untuk load balancer yang terhubung ke internet)
  • Diberi tag dengan kubernetes.io/role/internal-elb (untuk load balancer internal)
  • Tidak berisi tag dengan awalan kubernetes.io/cluster/, atau berisi tag kubernetes.io/cluster/CLUSTER_UID, dengan CLUSTER_UID adalah UID cluster saat ini.

Selain itu, subnet yang ditujukan untuk digunakan dengan load balancer yang terhubung ke internet harus memiliki rute ke gateway internet VPC.

Jika ada beberapa subnet di zona ketersediaan yang memenuhi persyaratan load balancer, GKE di AWS akan menentukan peringkat subnet berdasarkan ID subnetnya.

Memberi tag pada subnet Anda untuk tujuan penggunaan

Agar GKE di AWS dapat menemukan subnet untuk load balancer secara otomatis, Anda harus menerapkan salah satu dari dua tag ke subnet untuk memberi sinyal ketersediaannya. API tersebut adalah:

  • kubernetes.io/role/elb: terapkan tag ini ke subnet Anda untuk menandainya sebagai tersedia untuk load balancer yang ditampilkan ke internet. Ini harus berupa subnet publik dengan rute ke Gateway internet VPC Anda. Tetapkan tag ke 1. Untuk menerapkan tag ini, jalankan perintah berikut:

    aws ec2 create-tags \
      --resources SUBNET_ID \
      --tags "Key=kubernetes.io/role/elb,Value=1"
    
  • kubernetes.io/role/internal-elb: terapkan tag ini ke subnet Anda guna menandainya sebagai tersedia untuk load balancer internal. Tetapkan nilai tag ke 1. Untuk menerapkan tag ini, jalankan perintah berikut:

    aws ec2 create-tags \
      --resources SUBNET_ID \
      --tags Key=kubernetes.io/role/internal-elb,Value=1
    

Ganti kode berikut:

  • SUBNET_ID: ID subnet yang Anda beri tag

Setelah memberikan tag kubernetes.io/role pada subnet, Anda juga dapat memberinya tag dengan satu atau beberapa tag kubernetes.io/cluster/CLUSTER_UID, dengan CLUSTER_UID adalah UID GKE di cluster AWS. Hal ini mencegah cluster yang tidak tercantum dalam salah satu tag ini agar tidak otomatis menemukan subnet untuk digunakan oleh load balancernya.

Lihat dokumentasi Amazon aws ec2 create-tags untuk informasi selengkapnya tentang perintah aws ec2 create-tags.

Pemecahan masalah

Masalah paling umum pada konfigurasi load balancer adalah subnet yang diberi tag dengan tidak benar. Hal ini dapat menyebabkan algoritma penemuan otomatis memilih subnet yang salah. Untuk mendiagnosis dan mengatasi masalah ini:

  • Jika Anda membuat load balancer yang terhubung ke internet, pastikan setidaknya ada satu subnet publik di setiap zona ketersediaan yang berisi kumpulan node, dan subnet tersebut diberi tag kubernetes.io/role/elb.

  • Jika Anda membuat load balancer internal, pastikan setidaknya ada satu subnet di setiap zona ketersediaan yang berisi kumpulan node, dan subnet diberi tag kubernetes.io/role/internal-elb.

  • Periksa apakah subnet yang ingin Anda temukan secara otomatis memiliki tag dengan bentuk kubernetes.io/cluster/CLUSTER_UID. Jika subnet memiliki tag yang menamai cluster, subnet hanya dapat ditemukan secara otomatis oleh cluster bernama. Untuk mengatasi hal ini, hapus semua tag nama cluster (agar subnet dapat ditemukan secara otomatis dari cluster apa pun) atau tambahkan tag nama cluster dengan UID cluster AWS GKE Anda dan nilai shared.

  • Periksa histori peristiwa Kubernetes dengan perintah berikut:

    kubectl get events -A | grep LoadBalancer
    

    Misalnya, pesan peristiwa could not find any suitable subnets for creating the ELB menunjukkan bahwa tidak ada subnet yang dapat ditemukan secara otomatis. Jika Anda mendapatkan peringatan ini, pastikan subnet Anda dan tagnya sudah benar dan lengkap.

  • Untuk mencantumkan subnet yang dapat ditemukan secara otomatis untuk load balancer yang ditampilkan di internet, jalankan perintah berikut:

    aws ec2 describe-subnets \
      --filters "Name=vpc-id,Values=VPC_ID" "Name=tag:kubernetes.io/role/elb,Values=*"
    

    Ganti VPC_ID dengan ID VPC Anda.

  • Untuk mencantumkan subnet yang dapat ditemukan secara otomatis untuk load balancer internal, jalankan:

    aws ec2 describe-subnets \
      --filters "Name=vpc-id,Values=VPC_ID" "Name=tag:kubernetes.io/role/internal-elb,Values=*"
    

Langkah berikutnya