22.5. AWS Load Balancer Controller のインスタンスを作成する
AWS Load Balancer Operator をインストールしたら、AWS Load Balancer Controller を作成できます。
22.5.1. AWS Load Balancer Controller の作成
クラスターにインストールできる AWSLoadBalancerController
オブジェクトのインスタンスは 1 つだけです。CLI を使用して AWS Load Balancer Controller を作成できます。AWS Load Balancer Operator は、cluster
という名前のリソースのみを調整します。
前提条件
-
echoserver
namespace を作成している。 -
OpenShift CLI (
oc
) にアクセスできる。
手順
AWSLoadBalancerController
オブジェクトを定義する YAML ファイルを作成します。sample-aws-lb.yaml
ファイルの例apiVersion: networking.olm.openshift.io/v1 kind: AWSLoadBalancerController 1 metadata: name: cluster 2 spec: subnetTagging: Auto 3 additionalResourceTags: 4 - key: example.org/security-scope value: staging ingressClass: alb 5 config: replicas: 2 6 enabledAddons: 7 - AWSWAFv2 8
- 1
AWSLoadBalancerController
オブジェクトを定義します。- 2
- AWS Load Balancer Controller 名を定義します。このインスタンス名は、関連するすべてのリソースの接尾辞として追加されます。
- 3
- AWS Load Balancer Controller のサブネットのタグ付け方法を設定します。次の値が有効です。
-
Auto
: AWS Load Balancer Operator は、クラスターに属するサブネットを決定し、適切にタグ付けします。内部サブネットタグが内部サブネットに存在しない場合、Operator はロールを正しく判別できません。 -
Manual
: クラスターに属するサブネットに適切なロールタグを手動でタグ付けします。ユーザー提供のインフラストラクチャーにクラスターをインストールした場合は、このオプションを使用します。
-
- 4
- AWS Load Balancer Controller が AWS リソースをプロビジョニングするときに使用するタグを定義します。
- 5
- Ingress クラス名を定義します。デフォルト値は
alb
です。 - 6
- AWS Load Balancer Controller のレプリカの数を指定します。
- 7
- AWS Load Balancer Controller のアドオンとしてアノテーションを指定します。
- 8
alb.ingress.kubernetes.io/wafv2-acl-arn
アノテーションを有効にします。
次のコマンドを実行して、
AWSLoadBalancerController
オブジェクトを作成します。$ oc create -f sample-aws-lb.yaml
Deployment
リソースを定義する YAML ファイルを作成します。sample-aws-lb.yaml
ファイルの例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 command: - "/bin/socat" 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
リソースを定義する YAML ファイルを作成します。service-albo.yaml
ファイルの例:apiVersion: v1 kind: Service 1 metadata: name: <echoserver> 2 namespace: echoserver spec: ports: - port: 80 targetPort: 8080 protocol: TCP type: NodePort selector: app: echoserver
Ingress
リソースを定義する YAML ファイルを作成します。Ingress-albo.yaml
ファイルの例:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: <name> 1 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> 2 port: number: 80
検証
次のコマンドを実行して、
Ingress
リソースのステータスをHOST
変数に保存します。$ HOST=$(oc get ingress -n echoserver echoserver --template='{{(index .status.loadBalancer.ingress 0).hostname}}')
次のコマンドを実行して、
Ingress
リソースのステータスを確認します。$ curl $HOST