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.
Sebelum memulai
Sebelum GKE di AWS dapat membuat ALB, Anda harus:
- Buat GKE di cluster AWS dan konfigurasikan aksesnya dengan
kubectl
. - Daftarkan penyedia OIDC cluster ke AWS.
Ringkasan
Pembuatan ALB pertama dalam cluster melibatkan langkah-langkah berikut:
- Identifikasi dan beri tag atau anotasikan subnet dalam VPC tempat Anda ingin menyediakan ALB.
- Buat peran AWS yang memberi pengontrol ALB akses ke resource AWS.
- Instal
aws-load-balancer-controller
open source. - Membuat dan men-deploy konfigurasi ALB.
Untuk membuat ALB berikutnya, Anda hanya perlu membuat dan men-deploy konfigurasi ALB lainnya.
Membuat Load Balancer Aplikasi
Memberi tag pada subnet untuk ALB
Sebelum membuat ALB, Anda harus memberi tahu AWS tentang subnet yang akan digunakan. 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.
Guna memberi tag pada subnet yang dipilih sebagai tersedia untuk penemuan otomatis, lihat memberi tag pada subnet load balancer layanan.
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 IAM AWS
Download kebijakan IAM untuk Pengontrol Load Balancer AWS. Kebijakan ini menguraikan izin yang diperlukan
pengontrol load balancer untuk berfungsi. Anda dapat meninjau kebijakan ini 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 dalam membuat peran IAM AWS. Dalam petunjuk ini, ganti yang berikut:
AWS_POLICY_ARN
: ARN dari AWSLoadBalancerControllerIAPolicy yang dibuat di 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 dari 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 region 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 dimodifikasi 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 dari peran bernamaAWSLBControllerRole
AWS_REGION
: region AWS cluster Anda—misalnya,us-east-1
Terapkan manifes yang telah diubah ke cluster Anda dengan perintah berikut:
kubectl apply -f v2_4_4_full.yaml
Pastikan pengontrol load balancer berjalan dengan perintah berikut:
kubectl get deployment -n kube-system aws-load-balancer-controller
Output 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 contoh ALB
Bagian ini menunjukkan cara membuat contoh ALB yang menayangkan remake game 2048.
Salin konfigurasi YAML berikut ke dalam file bernama
2048.yaml
. Konfigurasi akan 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 perintahnya tampak 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 contoh ALB dan Deployment yang dibuat pada langkah sebelumnya, hapus manifes dengan perintah berikut:
kubectl delete -f 2048.yaml
Langkah selanjutnya
- Pelajari Anotasi masuk
- Pelajari dokumentasi Pengontrol Load Balancer AWS.