Halaman ini menunjukkan cara menyiapkan Load Balancer Aplikasi (ALB) AWS.
Untuk mengetahui informasi selengkapnya tentang jenis load balancer lain yang didukung GKE di AWS, lihat Ringkasan load balancer.
Halaman ini ditujukan untuk spesialis Jaringan yang ingin menginstal, mengonfigurasi, dan mendukung peralatan jaringan. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna umum GKE Enterprise.
Sebelum memulai
Sebelum GKE di AWS dapat membuat ALB, Anda harus:
- Buat cluster GKE di AWS dan
konfigurasi akses ke cluster tersebut dengan
kubectl
. - Daftarkan penyedia OIDC cluster dengan AWS.
Ringkasan
Membuat ALB pertama dalam cluster melibatkan langkah-langkah berikut:
- Identifikasi dan beri tag atau anotasi pada subnet dalam VPC yang ingin Anda gunakan untuk penyediaan ALB.
- Buat peran AWS yang memberikan akses pengontrol ALB ke resource AWS.
- Instal
aws-load-balancer-controller
open source. - Buat dan deploy konfigurasi ALB.
Untuk membuat ALB berikutnya, Anda hanya perlu membuat dan men-deploy konfigurasi ALB lain.
Membuat Load Balancer Aplikasi
Beri tag pada subnet untuk ALB Anda
Sebelum membuat ALB, Anda harus memberi tahu AWS subnet mana yang akan digunakan untuk menjalankannya. Metode yang biasa digunakan adalah memberi tag pada subnet dengan tag yang mengidentifikasinya sebagai tersedia untuk proses penemuan otomatis. Atau, Anda dapat menambahkan anotasi ke objek Ingress untuk mencantumkan secara eksplisit subnet yang akan dijalankan.
Untuk memberi tag pada subnet yang dipilih sebagai tersedia untuk penemuan otomatis, lihat memberi tag pada subnet load balancer layanan Anda.
Untuk menganotasi objek Ingress dengan daftar subnet, tambahkan anotasi bernama
alb.ingress.kubernetes.io/subnets
ke objek Ingress Kubernetes. Tetapkan nilai
anotasi ke daftar ID subnet atau nama subnet yang dipisahkan koma—misalnya subnet-012345678abcdef,subnet-
abcdef123456789,subnet-123456789abcdef
.
Membuat izin AWS IAM
Download
kebijakan IAM
untuk AWS Load Balancer Controller. Kebijakan ini mencantumkan izin yang diperlukan pengontrol load balancer agar dapat berfungsi. Anda dapat meninjau kebijakan di
GitHub. Perintah ini menyimpan kebijakan ke file bernama iam_policy.json
.
curl -Lo iam_policy.json \
https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.4/docs/install/iam_policy.json
Gunakan file ini untuk membuat kebijakan IAM bernama
AWSLoadBalancerControllerIAMPolicy
:aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
Memberikan akses ke load balancer
Buat peran IAM AWS untuk akun layanan pengontrol dengan mengikuti petunjuk di membuat peran IAM AWS. Dalam petunjuk ini, ganti kode berikut:
AWS_POLICY_ARN
: ARN AWSLoadBalancerControllerIAPolicy yang dibuat pada langkah sebelumnyaKSA_NAME
:"aws-load-balancer-controller"
K8S_NAMESPACE
:"kube-system"
AWS_ROLE_NAME
:"AWSLBControllerRole"
Untuk mengambil ARN kebijakan, jalankan perintah ini:
aws iam list-policies \
--query 'Policies[?PolicyName==`AWSLoadBalancerControllerIAMPolicy`].Arn' \
--output text
Menginstal pengontrol load balancer AWS
Untuk menyelesaikan langkah-langkah ini, ekstrak dan simpan nilai berikut. Anda akan membutuhkannya nanti.
Temukan UID cluster Anda dengan menjalankan perintah berikut:
gcloud container aws clusters describe CLUSTER_NAME \ --location GOOGLE_CLOUD_LOCATION \ --format "value(uid)"
Temukan ID VPC cluster Anda dengan menjalankan perintah berikut:
gcloud container aws clusters describe CLUSTER_NAME \ --location GOOGLE_CLOUD_LOCATION \ --format "value(networking.vpcId)"
Temukan ARN peran bernama
AWSLBControllerRole
dengan menjalankan perintah berikut:aws iam get-role --role-name AWSLBControllerRole --query Role.Arn --output text
Temukan region AWS cluster Anda dengan menjalankan perintah berikut:
gcloud container aws clusters describe CLUSTER_NAME \ --location GOOGLE_CLOUD_LOCATION \ --format "value(awsRegion)"
Ganti:
GOOGLE_CLOUD_LOCATION
dengan nama wilayah Google yang terkait dengan cluster AndaCLUSTER_NAME
dengan nama cluster Anda
Instal
cert-manager
dengan perintah berikut:kubectl apply \ --validate=false \ -f https://github.com/jetstack/cert-manager/releases/download/v1.10.0/cert-manager.yaml
Download manifes untuk
aws-load-balancer-controller
dan simpan ke file lokalv2_4_4_full.yaml
dengan perintah berikut:curl -Lo v2_4_4_full.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.4.4/v2_4_4_full.yaml
Edit file
v2_4_4_full.yaml
dan telusurikind: Deployment
. Ganti objekDeployment
dengan versi yang telah diubah ini:kind: Deployment metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/name: aws-load-balancer-controller name: aws-load-balancer-controller namespace: kube-system spec: replicas: 1 selector: matchLabels: app.kubernetes.io/component: controller app.kubernetes.io/name: aws-load-balancer-controller template: metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/name: aws-load-balancer-controller spec: containers: - args: - --cluster-name=CLUSTER_UID - --aws-region=AWS_REGION - --aws-vpc-id=AWS_VPC_ID - --ingress-class=alb - --disable-restricted-sg-rules=true image: amazon/aws-alb-ingress-controller:v2.4.4 env: - name: AWS_ROLE_ARN value: AWS_ROLE_ARN - name: AWS_WEB_IDENTITY_TOKEN_FILE value: /var/run/secrets/aws-load-balancer-controller/serviceaccount/token livenessProbe: failureThreshold: 2 httpGet: path: /healthz port: 61779 scheme: HTTP initialDelaySeconds: 30 timeoutSeconds: 10 name: controller ports: - containerPort: 9443 name: webhook-server protocol: TCP resources: limits: cpu: 200m memory: 500Mi requests: cpu: 100m memory: 200Mi securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true runAsNonRoot: true volumeMounts: - mountPath: /tmp/k8s-webhook-server/serving-certs name: cert readOnly: true - mountPath: /var/run/secrets/aws-load-balancer-controller/serviceaccount name: aws-iam-token readOnly: true priorityClassName: system-cluster-critical securityContext: fsGroup: 1337 serviceAccountName: aws-load-balancer-controller terminationGracePeriodSeconds: 10 volumes: - name: cert secret: defaultMode: 420 secretName: aws-load-balancer-webhook-tls - name: aws-iam-token projected: defaultMode: 420 sources: - serviceAccountToken: audience: sts.amazonaws.com expirationSeconds: 86400 path: token ---
Ganti kode berikut:
CLUSTER_UID
: UID cluster Anda—misalnya,bbc7d232-21f6-4bb1-90dd-4b064cf8ccf8
AWS_VPC_ID
: ID VPC AWS Anda—misalnya,vpc-1234567890abc
.AWS_ROLE_ARN
: ARN peran yang bernamaAWSLBControllerRole
AWS_REGION
: region AWS cluster Anda— misalnya,us-east-1
Terapkan manifes yang diubah ke cluster Anda dengan perintah berikut:
kubectl apply -f v2_4_4_full.yaml
Pastikan bahwa pengontrol load balancer berjalan dengan perintah berikut:
kubectl get deployment -n kube-system aws-load-balancer-controller
Output-nya akan terlihat seperti berikut, yang menunjukkan bahwa Deployment
aws-load-balancer-controller
tersedia.NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 1/1 1 1 51s
Membuat ALB contoh
Bagian ini menunjukkan cara membuat contoh ALB yang menyajikan remake game 2048.
Salin konfigurasi YAML berikut ke dalam file bernama
2048.yaml
. Konfigurasi membuat Namespace, Layanan, dan Deployment Kubernetes. Deployment diekspos melalui ALB Ingress.apiVersion: v1 kind: Namespace metadata: name: game-2048 --- apiVersion: apps/v1 kind: Deployment metadata: namespace: game-2048 name: deployment-2048 spec: selector: matchLabels: app.kubernetes.io/name: app-2048 replicas: 5 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - image: alexwhen/docker-2048 imagePullPolicy: Always name: app-2048 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: namespace: game-2048 name: service-2048 spec: ports: - port: 80 targetPort: 80 protocol: TCP type: NodePort selector: app.kubernetes.io/name: app-2048 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: game-2048 name: ingress-2048 annotations: alb.ingress.kubernetes.io/scheme: internet-facing spec: ingressClassName: alb rules: - http: paths: - path: / pathType: Prefix backend: service: name: service-2048 port: number: 80
Terapkan konfigurasi ke cluster Anda dengan perintah berikut:
kubectl apply -f 2048.yaml
Periksa status resource Ingress dengan perintah berikut:
kubectl get ingress -n game-2048 ingress-2048
Output perintah akan terlihat seperti berikut. Kolom
ADDRESS
berisi endpoint resource Ingress Anda.NAME CLASS HOSTS ADDRESS PORTS AGE ingress-2048 <none> * k8s-game2048-ingress2-e2c347319a-1195690687.us-west-2.elb.amazonaws.com 80 2m19s ```
Buka endpoint ALB di browser—misalnya:
http://k8s-game2048-ingress2-e2c347319a-1195690687.us-west-2.elb.amazonaws.com
. Game 2048 akan ditampilkan, yang menunjukkan bahwa Anda telah berhasil men-deploy dan mengonfigurasi load balancer ALB.
Pembersihan
Untuk menghapus ALB dan Deployment contoh yang dibuat pada langkah sebelumnya, hapus manifest dengan perintah berikut:
kubectl delete -f 2048.yaml
Langkah berikutnya
- Pelajari Anotasi Ingress
- Pelajari dokumentasi AWS Load Balancer Controller.