2장. Networking Operator
2.1. AWS Load Balancer Operator
AWS Load Balancer Operator는 Red Hat에서 지원하는 Operator로, 사용자가 선택적으로 AWS(ROSA) 클러스터의 SRE 관리 Red Hat OpenShift Service에 설치할 수 있습니다. AWS Load Balancer Operator는 ROSA 클러스터에서 실행되는 애플리케이션에 대해 AWS Elastic Load Balancing v2(ELBv2) 서비스를 프로비저닝하는 AWS Load Balancer 컨트롤러의 라이프사이클을 관리합니다.
2.1.1. Cloud Credential Operator 유틸리티를 사용하여 AWS IAM 역할 생성
Cloud Credential Operator 유틸리티(ccoctl
)를 사용하여 AWS Load Balancer Operator에 대한 AWS IAM 역할을 생성할 수 있습니다. AWS IAM 역할은 서브넷 및 VPC(Virtual Private Clouds)와 상호 작용합니다.
사전 요구 사항
-
ccoctl
바이너리를 추출하고 준비해야 합니다.
프로세스
다음 명령을 실행하여
CredentialsRequest
CR(사용자 정의 리소스)을 다운로드하여 디렉터리에 저장합니다.$ curl --create-dirs -o <credentials_requests_dir>/operator.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/operator-credentials-request.yaml
다음 명령을 실행하여 AWS IAM 역할을 생성하려면
ccoctl
유틸리티를 사용합니다.$ ccoctl aws create-iam-roles \ --name <name> \ --region=<aws_region> \ --credentials-requests-dir=<credentials_requests_dir> \ --identity-provider-arn <oidc_arn>
출력 예
2023/09/12 11:38:57 Role arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-operator created 1 2023/09/12 11:38:57 Saved credentials configuration to: /home/user/<credentials_requests_dir>/manifests/aws-load-balancer-operator-aws-load-balancer-operator-credentials.yaml 2023/09/12 11:38:58 Updated Role policy for Role <name>-aws-load-balancer-operator-aws-load-balancer-operator created
- 1
- AWS Load Balancer Operator에 대해 생성된 AWS IAM 역할의 Amazon 리소스 이름(예:
arn:aws:iam::777777:role/<name>-aws-balancer-operator-aws-load-balancer-operator
)을 확인합니다.
참고AWS IAM 역할 이름의 길이는 12자 미만이어야 합니다.
2.1.2. Cloud Credential Operator 유틸리티를 사용하여 컨트롤러에 대한 AWS IAM 역할 생성
Cloud Credential Operator 유틸리티(ccoctl
)를 사용하여 AWS Load Balancer Controller에 대한 AWS IAM 역할을 생성할 수 있습니다. AWS IAM 역할은 서브넷 및 VPC(Virtual Private Clouds)와 상호 작용하는 데 사용됩니다.
사전 요구 사항
-
ccoctl
바이너리를 추출하고 준비해야 합니다.
프로세스
다음 명령을 실행하여
CredentialsRequest
CR(사용자 정의 리소스)을 다운로드하여 디렉터리에 저장합니다.$ curl --create-dirs -o <credentials_requests_dir>/controller.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/controller/controller-credentials-request.yaml
다음 명령을 실행하여 AWS IAM 역할을 생성하려면
ccoctl
유틸리티를 사용합니다.$ ccoctl aws create-iam-roles \ --name <name> \ --region=<aws_region> \ --credentials-requests-dir=<credentials_requests_dir> \ --identity-provider-arn <oidc_arn>
출력 예
2023/09/12 11:38:57 Role arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-controller created 1 2023/09/12 11:38:57 Saved credentials configuration to: /home/user/<credentials_requests_dir>/manifests/aws-load-balancer-operator-aws-load-balancer-controller-credentials.yaml 2023/09/12 11:38:58 Updated Role policy for Role <name>-aws-load-balancer-operator-aws-load-balancer-controller created
- 1
- AWS Load Balancer 컨트롤러에 대해 생성된 AWS IAM 역할의 Amazon 리소스 이름(예:
arn:aws:iam::777777:role/<name>-aws-balancer-operator-aws-load-balancer-controller
)을 확인합니다.
참고AWS IAM 역할 이름의 길이는 12자 미만이어야 합니다.
2.1.3. AWS Load Balancer Operator 설치
특정 요구 사항을 충족하는 경우 AWS Load Balancer Operator 및 AWS Load Balancer 컨트롤러를 설치할 수 있습니다.
사전 요구 사항
- HCP(Hosted Control Plane) 모드에 설치된 여러 가용성 영역(AZ)에서 BYO-VPC(Bring-your-own-VPC) 구성이 있는 AWS(ROSA) 클러스터에 기존 Red Hat OpenShift Service가 있습니다.
-
dedicated-admin
역할의 사용자로 클러스터에 액세스할 수 있습니다. - 생성된 ROSA 클러스터의 VPC 및 서브넷을 수정할 수 있습니다.
-
ROSA CLI(
rosa
)를 설치했습니다. - AWS(Amazon Web Services) CLI를 설치했습니다.
- OpenShift Container Platform 4.13 이상을 사용하고 있습니다.
AWS Local Zone (LZ)에서 ROSA 클러스터와 함께 사용할 AWS Load Balancer Operator를 설치할 때 계정의 AWS 로컬 영역을 활성화해야 합니다. 또한 AWS Elastic Load Balancing v2(ELBv2) 서비스가 AWS Local Zone에 있는지 확인해야 합니다.
프로세스
다음 명령을 실행하여 클러스터 인프라 ID와 클러스터 OpenID Connect(OIDC) DNS를 식별합니다.
ROSA 클러스터 ID를 식별합니다.
$ rosa describe cluster --cluster=<cluster_name> | grep -i 'Infra ID'
또는
$ oc get infrastructure cluster -o json | jq -r '.status.infrastructureName'
다음
rosa
CLI 명령을 사용하여 ROSA 클러스터 OIDC DNS를 식별합니다.$ rosa describe cluster --cluster=<cluster_name> | grep -i OIDC 1
- 1
- OIDC DNS 예제는
oidc.op1.openshiftapps.com/28q7fsn54m2jts3kd556aij4mu9omah
입니다.
또는
$ oc get authentication.config cluster -o=jsonpath="{.spec.serviceAccountIssuer}"
-
IAM 액세스 관리 ID 공급자로 이동하여 AWS 웹 콘솔에서 OIDC ARM(Amazon Resource Name) 정보를 찾습니다. OIDC ARN 예제는
arn:aws:iam::777777777:oidc-provider/<oidc_dns_url
>입니다. - 명령의 출력을 저장합니다. 이 정보는 이 절차의 향후 단계에서 사용됩니다.
AWS CLI를 사용하여 AWS Load Balancer Operator에 필요한 AWS IAM 정책을 생성합니다.
dedicated-admin
역할의 사용자로 ROSA 클러스터에 로그인하고 다음 명령을 사용하여 새 프로젝트를 생성합니다.$ oc new-project aws-load-balancer-operator
새로 생성된 AWS IAM 역할에 다음 신뢰 정책을 할당합니다.
$ IDP='{Cluster_OIDC_Endpoint}'
$ IDP_ARN="arn:aws:iam::{AWS_AccountNo}:oidc-provider/${IDP}" 1
- 1
{AWS_AccountNo}
를 AWS 계정 번호로 바꾸고{Cluster_OIDC_Endpoint}
를 이 절차의 앞부분에서 확인된 OIDC DNS로 바꿉니다.
trsut 정책이 AWS IAM 역할에 할당되었는지 확인합니다.
출력 예
$ cat EOF albo-operator-trusted-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "${IDP_ARN}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${IDP}:sub": "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-operator-controller-manager" } } } ] } EOF
중요{Cluster_OIDC_Endpoint}
를 이전에 확인한 OIDC DNS로 교체할 때 OIDC DNS의https
부분을 포함하지 마십시오. URL 내에서/
를 따르는 영숫자 정보만 필요합니다.생성된 신뢰 정책을 사용하여 역할을 생성하고 확인합니다.
$ aws iam create-role --role-name albo-operator --assume-role-policy-document file://albo-operator-trusted-policy.json
$ OPERATOR_ROLE_ARN=$(aws iam get-role --role-name albo-operator --output json | jq -r '.Role.Arn')
$ echo $OPERATOR_ROLE_ARN
출력 예
ROLE arn:aws:iam::<aws_account_number>:role/albo-operator 2023-08-02T12:13:22Z ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-manager PRINCIPAL arn:aws:iam:<aws_account_number>:oidc-provider/<oidc_provider_id>
참고arn
:aws:iam::777777777:role/albo-operator와 같은 AWS IAM 역할의Operator의 권한 정책을 역할에 연결합니다.
$ curl -o albo-operator-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/release-1.1/hack/operator-permission-policy.json $ aws iam put-role-policy --role-name albo-operator --policy-name perms-policy-albo-operator --policy-document file://albo-operator-permission-policy.json
AWS CLI를 사용하여 AWS 로드 밸런서 컨트롤러에 필요한 AWS IAM 정책을 생성합니다.
ID 공급자에 대한 신뢰 정책 파일을 생성합니다. 다음 예제에서는 OpenID Connect를 사용합니다.
$ IDP='{Cluster_OIDC_Endpoint}' $ IDP_ARN="arn:aws:iam::{AWS_AccountNo}:oidc-provider/${IDP}" $ cat <EOF> albo-controller-trusted-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "${IDP_ARN}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${IDP}:sub": "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-cluster" } } } ] } EOF
생성된 신뢰 정책을 사용하여 역할을 생성하고 확인합니다.
$ aws iam create-role --role-name albo-controller --assume-role-policy-document file://albo-controller-trusted-policy.json $ CONTROLLER_ROLE_ARN=$(aws iam get-role --role-name albo-controller --output json | jq -r '.Role.Arn') $ echo $CONTROLLER_ROLE_ARN
출력 예
ROLE arn:aws:iam::<aws_account_number>:role/albo-controller 2023-08-02T12:13:22Z ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-cluster PRINCIPAL arn:aws:iam:<aws_account_number>:oidc-provider/<oidc_provider_id>
참고AWS Load Balancer 컨트롤러에 대해 생성된 AWS IAM 역할의 일부가 있는 경우(예:
arn
:aws:iam::777777777:role/albo-controller컨트롤러의 권한 정책을 역할에 연결합니다.
$ curl -o albo-controller-permission-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy.json $ aws iam put-role-policy --role-name albo-controller --policy-name perms-policy-albo-controller --policy-document file://albo-controller-permission-policy.json
HCP 클러스터가 있는 ROSA의 경우 서브넷 검색에 필요한 태그를 추가합니다.
ROSA 클러스터를 호스팅하는 VPC 및 모든 서브넷에 다음
{Key: Value}
태그를 추가합니다.{Cluster Infra ID}
를 이전에 지정한 Infra ID로 바꿉니다.kubernetes.io/cluster/${Cluster Infra ID}:owned
다음 ELBv2
{Key: Value}
태그를 프라이빗 서브넷에 추가하고 필요한 경우 퍼블릭 서브넷에 추가합니다.-
프라이빗 서브넷:
kubernetes.io/role/internal-elb:1
퍼블릭 서브넷:
kubernetes.io/role/elb:1
참고인터넷 및 내부 로드 밸런서는 이러한 서브넷이 속한 AWS 가용 영역 내에 생성됩니다.
중요AWS Load Balancer Operator에서 생성한 ELBv2 리소스(예: ALB 및 NLB)는 ROSA 클러스터에 설정된 사용자 정의 태그를 상속하지 않습니다. 이러한 리소스에 대해 태그를 별도로 설정해야 합니다.
-
프라이빗 서브넷:
다음 단계를 완료하여 AWS Load Balancer Operator를 생성합니다.
다음 명령을 실행하여
OperatorGroup
오브젝트를 생성합니다.$ cat EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: aws-load-balancer-operator namespace: aws-load-balancer-operator spec: targetNamespaces: [] EOF
다음 명령을 실행하여
Subscription
오브젝트를 생성합니다.$ cat EOF | oc apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: aws-load-balancer-operator namespace: aws-load-balancer-operator spec: channel: stable-v1 name: aws-load-balancer-operator source: redhat-operators sourceNamespace: openshift-marketplace config: env: - name: ROLEARN value: "<operator_role_arn>" 1 EOF
- 1
- AWS Load Balancer Operator의 ARN 역할을 지정합니다.
CredentialsRequest
오브젝트는 이 ARN 역할을 사용하여 AWS 인증 정보를 프로비저닝합니다. <operator_role_arn
>의 예는arn:aws:iam::<aws_account_number>:role/albo-operator
입니다.
AWS Load Balancer 컨트롤러를 생성합니다.
apiVersion: networking.olm.openshift.io/v1 kind: AWSLoadBalancerController metadata: name: cluster spec: subnetTagging: Manual credentialsRequestConfig: stsIAMRoleARN: <controller_role_arn>
중요AWS Load Balancer 컨트롤러는 AWS 가용 영역과 AWS 로컬 영역과 연결된 AWS 로드 밸런서(ALB) 생성을 지원하지 않기 때문에 ROSA 클러스터는 AWS 로컬 영역 또는 AWS 가용 영역과만 관련된 ALB를 동시에 사용할 수 있습니다.
검증
다음 명령을 실행하여 설치에 성공했는지 확인합니다.
프로젝트 내에서 Pod에 대한 정보를 수집합니다.
$ oc get pods -n aws-load-balancer-operator
프로젝트 내에서 로그를 확인합니다.
$ oc logs -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager -c manager
추가 리소스
- AWS IAM 역할에 신뢰 정책을 할당하는 방법에 대한 자세한 내용은 IAM 역할과 함께 신뢰 정책을 사용하는 방법을 참조하십시오.
- AWS IAM 역할 생성에 대한 자세한 내용은 IAM 역할 생성 을 참조하십시오.
- AWS IAM 역할에 AWS IAM 권한을 추가하는 방법에 대한 자세한 내용은 IAM ID 권한 추가 및 제거를 참조하십시오.
- 인증 정보 파일 포맷에 대한 자세한 내용은 Amazon Web Services 보안 토큰 서비스에서 수동 모드 사용을 참조하십시오.
- AWS Load Balancer 컨트롤러 구성에 대한 자세한 내용은 여러 수신 생성 및 TLS 종료 추가
- VPC 및 서브넷을 포함한 AWS 리소스에 태그를 추가하는 방법에 대한 자세한 내용은 Amazon EC2 리소스 태그를 참조하십시오.
- ROSA 클러스터에서 실행되는 애플리케이션에 대해 ELBv2가 생성되었는지 확인하는 방법에 대한 자세한 내용은 AWS Load Balancer 컨트롤러 인스턴스 생성 을 참조하십시오.
2.1.4. AWS Load Balancer Operator 설치 제거
AWS Load Balancer Operator를 설치 제거하고 관련 리소스를 전체적으로 정리하려면 다음 절차를 수행합니다.
프로세스
- ALBO에서 생성 및 관리하는 로드 밸런서를 삭제하여 샘플 애플리케이션을 정리합니다. 로드 밸런서를 삭제하는 방법에 대한 자세한 내용은 애플리케이션 로드 밸런서 삭제를 참조하십시오.
- 서브넷 검색 및 ALB(Application Load Balancer) 생성을 위해 서브넷에 추가된 VPC 태그를 제거하여 AWS VPC 태그를 정리합니다. 자세한 내용은 태그 기본 을 참조하십시오.
- AWS Load Balancer Operator와 Application Load Balancer Controller를 모두 삭제하여 AWS Load Balancer Operator 구성 요소를 정리합니다. 자세한 내용은 클러스터에서 Operator 삭제를 참조하십시오.