Menyiapkan Load Balancer HTTP

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:

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
  1. 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 sebelumnya
  • KSA_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

  1. 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 Anda
    • CLUSTER_NAME dengan nama cluster Anda
  2. 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
    
  3. Download manifes untuk aws-load-balancer-controller dan simpan ke file lokal v2_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
    
  4. Edit file v2_4_4_full.yaml dan telusuri kind: Deployment. Ganti objek Deployment 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 bernama AWSLBControllerRole
    • AWS_REGION: region AWS cluster Anda—misalnya, us-east-1
  5. Terapkan manifes yang telah diubah ke cluster Anda dengan perintah berikut:

    kubectl apply -f v2_4_4_full.yaml
    
  6. 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.

  1. 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
    
  2. Terapkan konfigurasi ke cluster Anda dengan perintah berikut:

    kubectl apply -f 2048.yaml
    
  3. 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
     ```
    
  4. 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