第9章 チュートリアル: ROSA 上の AWS Load Balancer Operator
このコンテンツは Red Hat のエキスパートが作成したものですが、サポート対象のすべての設定でまだテストされていません。
AWS Load Balancer Operator によって作成されたロードバランサーは、OpenShift ルート には使用できません。OpenShift ルートのレイヤー 7 機能をすべて必要としない個々のサービスまたは Ingress リソースにのみ使用する必要があります。
AWS Load Balancer Controller は、Red Hat OpenShift Service on AWS (ROSA) クラスターの AWS Elastic Load Balancer を管理します。このコントローラーは、Kubernetes Ingress リソースを作成するときに AWS Application Load Balancer (ALB) をプロビジョニングし、LoadBalancer タイプを使用して Kubernetes Service リソースを実装するときに AWS Network Load Balancer (NLB) をプロビジョニングします。
デフォルトの AWS インツリーロードバランサープロバイダーと比較して、このコントローラーは ALB と NLB 用の詳細なアノテーションを使用して開発されています。高度な使用例としては以下が挙げられます。
- ネイティブ Kubernetes Ingress オブジェクトと ALB を使用する
- AWS ウェブアプリケーションファイアウォール (WAF) サービスと ALB を統合する
- カスタムの NLB ソース IP 範囲を指定する
- カスタムの NLB 内部 IP アドレスを指定する
AWS Load Balancer Operator は、ROSA クラスター内の aws-load-balancer-controller
のインスタンスをインストール、管理、設定するために使用します。
9.1. 前提条件
AWS ALB には、マルチ AZ クラスターと、クラスターと同じ VPC 内の 3 つの AZ に分割された 3 つのパブリックサブネットが必要です。このため、ALB は多くの PrivateLink クラスターには適していません。AWS NLB にはこの制限はありません。
- マルチ AZ ROSA Classic クラスター
- BYO VPC クラスター
- AWS CLI
- OC CLI
9.1.1. 環境
環境変数を準備します。
$ export AWS_PAGER="" $ export ROSA_CLUSTER_NAME=$(oc get infrastructure cluster -o=jsonpath="{.status.infrastructureName}" | sed 's/-[a-z0-9]\{5\}$//') $ export REGION=$(oc get infrastructure cluster -o=jsonpath="{.status.platformStatus.aws.region}") $ export OIDC_ENDPOINT=$(oc get authentication.config.openshift.io cluster -o jsonpath='{.spec.serviceAccountIssuer}' | sed 's|^https://||') $ export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) $ export SCRATCH="/tmp/${ROSA_CLUSTER_NAME}/alb-operator" $ mkdir -p ${SCRATCH} $ echo "Cluster: ${ROSA_CLUSTER_NAME}, Region: ${REGION}, OIDC Endpoint: ${OIDC_ENDPOINT}, AWS Account ID: ${AWS_ACCOUNT_ID}"
9.1.2. AWS VPC とサブネット
このセクションは、既存の VPC にデプロイされたクラスターにのみ適用されます。クラスターを既存の VPC にデプロイしなかった場合は、このセクションをスキップして、その後のインストールセクションに進んでください。
以下の変数を、ROSA デプロイメントに合わせて適切な値に設定します。
$ export VPC_ID=<vpc-id> $ export PUBLIC_SUBNET_IDS=<public-subnets> $ export PRIVATE_SUBNET_IDS=<private-subnets> $ export CLUSTER_NAME=$(oc get infrastructure cluster -o=jsonpath="{.status.infrastructureName}")
クラスター名を使用してクラスターの VPC にタグを追加します。
$ aws ec2 create-tags --resources ${VPC_ID} --tags Key=kubernetes.io/cluster/${CLUSTER_NAME},Value=owned --region ${REGION}
パブリックサブネットにタグを追加します。
$ aws ec2 create-tags \ --resources ${PUBLIC_SUBNET_IDS} \ --tags Key=kubernetes.io/role/elb,Value='' \ --region ${REGION}
プライベートサブネットにタグを追加します。
$ aws ec2 create-tags \ --resources "${PRIVATE_SUBNET_IDS}" \ --tags Key=kubernetes.io/role/internal-elb,Value='' \ --region ${REGION}