19.3. AWS Load Balancer コントローラーのインスタンスの作成
Operator をインストールした後、 AWS Load Balancer コントローラーのインスタンスを作成できます。
19.3.1. AWS Load Balancer Operator を使用した AWS Load Balancer コントローラーインスタンスの作成
クラスターにインストールできる aws-load-balancer-controller
のインスタンスは 1 つだけです。CLI を使用して AWS Load Balancer コントローラーを作成できます。AWS Load Balancer (ALB) Operator は、cluster
という名前のリソースのみを調整します。
前提条件
-
echoserver
namespace を作成している。 -
OpenShift CLI (
oc
) にアクセスできる。
手順
次のように、
aws-load-balancer-controller
リソース YAML ファイル (たとえば、sample-aws-lb.yaml
) を作成します。apiVersion: networking.olm.openshift.io/v1alpha1 kind: AWSLoadBalancerController 1 metadata: name: cluster 2 spec: subnetTagging: Auto 3 additionalResourceTags: 4 example.org/cost-center: 5113232 example.org/security-scope: staging ingressClass: alb 5 config: replicas: 2 6 enabledAddons: 7 - AWSWAFv2 8
- 1
aws-load-balancer-controller
リソースを定義します。- 2
- AWS Load Balancer コントローラーインスタンスの名前を定義します。このインスタンス名は、関連するすべてのリソースの接尾辞として追加されます。
- 3
- 有効なオプションは
Auto
とManual
です。値がAuto
に設定されている場合、Operator はクラスターに属するサブネットを判別し、それらに適切なタグを付けようと試みます。内部サブネットタグが内部サブネットに存在しない場合、Operator はロールを正しく判別できません。ユーザー提供のインフラストラクチャーにクラスターをインストールした場合は、サブネットに適切なロールタグを手動でタグ付けし、サブネットタグ付けポリシーをManual
に設定できます。 - 4
- コントローラーが AWS リソースをプロビジョニングするときに使用するタグを定義します。
- 5
- このフィールドのデフォルト値は
alb
です。IngressClass
リソースが存在しない場合、Operator は同じ名前でプロビジョニングします。 - 6
- コントローラーのレプリカ数を指定します。
- 7
- アノテーションを介して指定される AWS Load Balancer のアドオンを指定します。
- 8
alb.ingress.kubernetes.io/wafv2-acl-arn
アノテーションを有効にします。
次のコマンドを実行して、
aws-load-balancer-controller
リソースを作成します。$ oc create -f sample-aws-lb.yaml
AWS Load Balancer コントローラーが起動したら、
deployment
リソースを作成します。apiVersion: apps/v1 kind: Deployment 1 metadata: name: <echoserver> 2 namespace: echoserver spec: selector: matchLabels: app: echoserver replicas: 3 3 template: metadata: labels: app: echoserver spec: containers: - image: openshift/origin-node args: - TCP4-LISTEN:8080,reuseaddr,fork - EXEC:'/bin/bash -c \"printf \\\"HTTP/1.0 200 OK\r\n\r\n\\\"; sed -e \\\"/^\r/q\\\"\"' imagePullPolicy: Always name: echoserver ports: - containerPort: 8080
service
リソースを作成します。apiVersion: v1 kind: Service 1 metadata: name: <echoserver> 2 namespace: echoserver spec: ports: - port: 80 targetPort: 8080 protocol: TCP type: NodePort selector: app: echoserver
ALB ベースの
Ingress
リソースをデプロイします。apiVersion: networking.k8s.io/v1 kind: Ingress 1 metadata: name: <echoserver> 2 namespace: echoserver annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: instance spec: ingressClassName: alb rules: - http: paths: - path: / pathType: Exact backend: service: name: <echoserver> 3 port: number: 80
検証
次のコマンドを実行して、
Ingress
リソースのステータスを確認し、プロビジョニングされた AWS Load Balancer (ALB) のホストを表示します。$ HOST=$(kubectl get ingress -n echoserver echoserver -o json | jq -r '.status.loadBalancer.ingress[0].hostname')
次のコマンドを実行して、プロビジョニングされた AWS Load Balancer (ALB) ホストのステータスを確認します。
$ curl $HOST