Subnet load balancer

Halaman ini menjelaskan cara kerja GKE di AWS dengan AWS untuk memilih subnet bagi 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 mana yang akan digunakan untuk menempatkannya. Subnet menentukan zona ketersediaan, alamat IP, dan endpoint load balancer.

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

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

Jika tidak ada subnet yang diberi tag dan tersedia

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

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 on AWS dapat menemukan subnet secara otomatis, subnet harus:

  • Diberi tag dengan kubernetes.io/role/elb (untuk load balancer yang terhubung ke internet)
  • Diberi tag 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 menghadap internet harus memiliki rute ke gateway internet VPC.

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

Beri tag pada subnet untuk penggunaan yang dimaksudkan

Agar GKE on AWS dapat menemukan subnet secara otomatis untuk load balancer, Anda harus menerapkan salah satu dari dua tag ke subnet untuk menandakan ketersediaannya. Berikut ini:

  • kubernetes.io/role/elb: terapkan tag ini ke subnet Anda untuk menandainya sebagai tersedia untuk load balancer yang menghadap 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 untuk 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 memberi tag kubernetes.io/role pada subnet, Anda juga dapat memberi tag dengan satu atau beberapa tag kubernetes.io/cluster/CLUSTER_UID, dengan CLUSTER_UID adalah UID cluster GKE di AWS. Hal ini mencegah cluster yang tidak tercantum dalam salah satu tag ini menemukan subnet secara otomatis untuk digunakan oleh load balancer-nya.

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

Pemecahan masalah

Masalah paling umum pada konfigurasi load balancer adalah subnet yang diberi tag secara salah. 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 ada setidaknya satu subnet publik di setiap zona ketersediaan yang berisi node pool, dan subnet tersebut diberi tag kubernetes.io/role/elb.

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

  • Periksa apakah subnet yang ingin Anda temukan secara otomatis memiliki tag dalam bentuk kubernetes.io/cluster/CLUSTER_UID. Jika subnet memiliki tag tersebut yang menyebutkan nama cluster, subnet hanya dapat ditemukan secara otomatis oleh cluster yang disebutkan namanya. Untuk mengatasi masalah ini, hapus semua tag nama cluster (agar subnet dapat ditemukan secara otomatis dari cluster mana pun) atau tambahkan tag nama cluster dengan UID cluster GKE di AWS 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 dan tagnya sudah benar dan lengkap.

  • Untuk mencantumkan subnet yang dapat ditemukan secara otomatis untuk load balancer yang menghadap 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