6.2. AWS Load Balancer Operator
6.2.1. AWS Load Balancer Operator 릴리스 노트
AWS Load Balancer(ALB) Operator는 AWSLoadBalancerController
리소스의 인스턴스를 배포 및 관리합니다.
AWS Load Balancer(ALB) Operator는 x86_64
아키텍처에서만 지원됩니다.
이 릴리스 노트에서는 OpenShift Container Platform에서 AWS Load Balancer Operator의 개발을 추적합니다.
AWS Load Balancer Operator에 대한 개요는 OpenShift Container Platform의 AWS Load Balancer Operator 를 참조하십시오.
AWS Load Balancer Operator는 현재 AWS GovCloud를 지원하지 않습니다.
6.2.1.1. AWS Load Balancer Operator 1.1.1
다음 권고는 AWS Load Balancer Operator 버전 1.1.1에 사용할 수 있습니다.
6.2.1.2. AWS Load Balancer Operator 1.1.0
AWS Load Balancer Operator 버전 1.1.0은 AWS Load Balancer 컨트롤러 버전 2.4.4를 지원합니다.
AWS Load Balancer Operator 버전 1.1.0에 대해 다음 권고를 사용할 수 있습니다.
6.2.1.2.1. 주요 변경 사항
- 이 릴리스에서는 Kubernetes API 버전 0.27.2를 사용합니다.
6.2.1.2.2. 새로운 기능
- AWS Load Balancer Operator는 이제 Cloud Credential Operator를 사용하여 표준화된 STS(Security Token Service) 흐름을 지원합니다.
6.2.1.2.3. 버그 수정
FIPS 호환 클러스터는 TLS 버전 1.2를 사용해야 합니다. 이전에는 AWS Load Balancer 컨트롤러의 Webhook에서 최소 버전으로만 TLS 1.3을 허용하여 FIPS 호환 클러스터에서 다음과 같은 오류가 발생했습니다.
remote error: tls: protocol version not supported
이제 AWS Load Balancer 컨트롤러에서 TLS 1.2를 최소 TLS 버전으로 수락하여 이 문제를 해결합니다. (OCPBUGS-14846)
6.2.1.3. AWS Load Balancer Operator 1.0.1
다음 권고는 AWS Load Balancer Operator 버전 1.0.1에 사용할 수 있습니다.
6.2.1.4. AWS Load Balancer Operator 1.0.0
이제 AWS Load Balancer Operator를 이 릴리스에서 일반적으로 사용할 수 있습니다. AWS Load Balancer Operator 버전 1.0.0은 AWS Load Balancer 컨트롤러 버전 2.4.4를 지원합니다.
다음 권고는 AWS Load Balancer Operator 버전 1.0.0에 사용할 수 있습니다.
AWS Load Balancer(ALB) Operator 버전 1.x.x는 기술 프리뷰 버전 0.x.x에서 자동으로 업그레이드할 수 없습니다. 이전 버전에서 업그레이드하려면 ALB 피연산자를 제거하고 aws-load-balancer-operator
네임스페이스를 삭제해야 합니다.
6.2.1.4.1. 주요 변경 사항
-
이 릴리스에서는 새
v1
API 버전을 사용합니다.
6.2.1.4.2. 버그 수정
- 이전에는 AWS Load Balancer Operator에서 프로비저닝한 컨트롤러에서 클러스터 전체 프록시에 대한 구성을 제대로 사용하지 않았습니다. 이제 이러한 설정이 컨트롤러에 적절하게 적용됩니다. (OCPBUGS-4052, OCPBUGS-5295)
6.2.1.5. 이전 버전
AWS Load Balancer Operator의 두 가지 초기 버전은 기술 프리뷰로 사용할 수 있습니다. 이러한 버전은 프로덕션 클러스터에서 사용해서는 안 됩니다. Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
AWS Load Balancer Operator 버전 0.2.0에 대해 다음 권고를 사용할 수 있습니다.
AWS Load Balancer Operator 버전 0.0.1에 대해 다음 권고를 사용할 수 있습니다.
6.2.2. OpenShift Container Platform의 AWS Load Balancer Operator
AWS Load Balancer Operator는 AWS Load Balancer 컨트롤러를 배포하고 관리합니다. OpenShift Container Platform 웹 콘솔 또는 CLI를 사용하여 OperatorHub에서 AWS Load Balancer Operator를 설치할 수 있습니다.
6.2.2.1. AWS Load Balancer Operator 고려 사항
AWS Load Balancer Operator를 설치하고 사용하기 전에 다음 제한 사항을 검토하십시오.
- IP 트래픽 모드는 AWS Elastic Kubernetes Service(EKS)에서만 작동합니다. AWS Load Balancer Operator는 AWS Load Balancer Controller의 IP 트래픽 모드를 비활성화합니다. IP 트래픽 모드를 비활성화하면 AWS Load Balancer 컨트롤러에서 Pod 준비 게이트를 사용할 수 없습니다.
-
AWS Load Balancer Operator는 --disable-ingress-
class-annotation 및
과 같은 명령줄 플래그를 AWS Load Balancer 컨트롤러에 추가합니다. 따라서 AWS Load Balancer Operator는--disable-ingress
-group-name-annotationIngress
리소스의kubernetes.io/ingress.class
및alb.ingress.kubernetes.io/group.name
주석을 사용할 수 없습니다. -
SVC 유형이
NodePort
(LoadBalancer
또는ClusterIP
아님)가 되도록 AWS Load Balancer Operator를 구성했습니다.
6.2.2.2. AWS Load Balancer Operator
kubernetes.io/role/elb
태그가 누락된 경우 AWS Load Balancer Operator는 퍼블릭 서브넷을 태그할 수 있습니다. 또한 AWS Load Balancer Operator는 기본 AWS 클라우드에서 다음 정보를 감지합니다.
- Operator를 호스팅하는 클러스터가 배포되는 VPC(가상 프라이빗 클라우드)의 ID입니다.
- 검색된 VPC의 퍼블릭 및 프라이빗 서브넷입니다.
AWS Load Balancer Operator는 인스턴스
대상 유형과 함께NLB(Network Load Balancer)를 사용하여 LoadBalancer
유형의 Kubernetes 서비스 리소스를 지원합니다.
프로세스
다음 명령을 실행하여
Subscription
오브젝트를 생성하여 OperatorHub의 필요에 따라 AWS Load Balancer Operator를 배포할 수 있습니다.$ oc -n aws-load-balancer-operator get sub aws-load-balancer-operator --template='{{.status.installplan.name}}{{"\n"}}'
출력 예
install-zlfbt
다음 명령을 실행하여 설치 계획의 상태가
Complete
인지 확인합니다.$ oc -n aws-load-balancer-operator get ip <install_plan_name> --template='{{.status.phase}}{{"\n"}}'
출력 예
Complete
다음 명령을 실행하여
aws-load-balancer-operator-controller-manager
배포의 상태를 확인합니다.$ oc get -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager
출력 예
NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-operator-controller-manager 1/1 1 1 23h
6.2.2.3. AWS VPC 클러스터에서 AWS Load Balancer Operator 사용으로 확장됨
AWS VPC 클러스터에서 AWS Application Load Balancer를 프로비저닝하도록 AWS Load Balancer Operator를 구성할 수 있습니다. AWS Outposts는 AWS Network Load Balancer를 지원하지 않습니다. 결과적으로 AWS Load Balancer Operator는 Outpost에서 네트워크 로드 밸런서를 프로비저닝할 수 없습니다.
클라우드 서브넷 또는 Outpost 서브넷에서 AWS Application Load Balancer를 생성할 수 있습니다. 클라우드의 애플리케이션 로드 밸런서는 클라우드 기반 컴퓨팅 노드에 연결할 수 있으며, Outpost의 Application Load Balancer는 엣지 컴퓨팅 노드에 연결할 수 있습니다. 외부 서브넷 또는 VPC 서브넷으로 Ingress 리소스에 주석을 달어야 하지만 둘 다 해당되지는 않습니다.
사전 요구 사항
- AWS VPC 클러스터를 Outpost로 확장했습니다.
-
OpenShift CLI(
oc
)가 설치되어 있습니다. - AWS Load Balancer Operator를 설치하고 AWS Load Balancer 컨트롤러를 생성했습니다.
프로세스
지정된 서브넷을 사용하도록
Ingress
리소스를 구성합니다.Ingress
리소스 구성의 예apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: <application_name> annotations: alb.ingress.kubernetes.io/subnets: <subnet_id> 1 spec: ingressClassName: alb rules: - http: paths: - path: / pathType: Exact backend: service: name: <application_name> port: number: 80
- 1
- 사용할 서브넷을 지정합니다.
- Outpost에서 Application Load Balancer를 사용하려면 Outpost 서브넷 ID를 지정합니다.
- 클라우드에서 Application Load Balancer를 사용하려면 다른 가용성 영역에 두 개 이상의 서브넷을 지정해야 합니다.
6.2.2.4. AWS Load Balancer Operator 로그
oc logs
명령을 사용하여 AWS Load Balancer Operator 로그를 볼 수 있습니다.
프로세스
다음 명령을 실행하여 AWS Load Balancer Operator의 로그를 확인합니다.
$ oc logs -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager -c manager
6.2.3. AWS Load Balancer Operator 설치
AWS Load Balancer Operator는 AWS Load Balancer 컨트롤러를 배포하고 관리합니다. OpenShift Container Platform 웹 콘솔 또는 CLI를 사용하여 OperatorHub에서 AWS Load Balancer Operator를 설치할 수 있습니다.
6.2.3.1. 웹 콘솔을 사용하여 AWS Load Balancer Operator 설치
웹 콘솔을 사용하여 AWS Load Balancer Operator를 설치할 수 있습니다.
사전 요구 사항
-
cluster-admin
권한이 있는 사용자로 OpenShift Container Platform 웹 콘솔에 로그인했습니다. - 클러스터는 AWS를 플랫폼 유형 및 클라우드 공급자로 구성합니다.
- STS(보안 토큰 서비스) 또는 사용자 프로비저닝 인프라를 사용하는 경우 관련 준비 단계를 따르십시오. 예를 들어 AWS Security Token Service를 사용하는 경우 "AWS Security Token Service (STS)를 사용하여 클러스터에서 AWS Load Balancer Operator 준비"를 참조하십시오.
프로세스
-
OpenShift Container Platform 웹 콘솔에서 Operators
OperatorHub 로 이동합니다. - AWS Load Balancer Operator 를 선택합니다. 키워드로 필터링 텍스트 상자를 사용하거나 필터 목록을 사용하여 Operator 목록에서 AWS Load Balancer Operator를 검색할 수 있습니다.
-
aws-load-balancer-operator
네임스페이스를 선택합니다. Operator 설치 페이지에서 다음 옵션을 선택합니다.
- 채널을 stable-v1 로 업데이트합니다.
- 클러스터의 모든 네임스페이스(기본값) 로 설치 모드입니다.
-
설치된 네임스페이스 에서
aws-load-balancer-operator
.aws-load-balancer-operator
네임스페이스가 없으면 Operator 설치 중에 생성됩니다. - 자동 또는 수동으로 승인 업데이트를 선택합니다. 기본적으로 업데이트 승인은 자동으로 설정됩니다. 자동 업데이트를 선택하면 OLM(Operator Lifecycle Manager)이 개입 없이 Operator의 실행 중인 인스턴스를 자동으로 업그레이드합니다. 수동 업데이트를 선택하면 OLM에서 업데이트 요청을 생성합니다. 클러스터 관리자는 Operator가 새 버전으로 업데이트되도록 업데이트 요청을 수동으로 승인해야 합니다.
- 설치를 클릭합니다.
검증
- AWS Load Balancer Operator에 설치된 Operator 대시보드에서 성공으로 상태가 표시되는지 확인합니다.
6.2.3.2. CLI를 사용하여 AWS Load Balancer Operator 설치
CLI를 사용하여 AWS Load Balancer Operator를 설치할 수 있습니다.
사전 요구 사항
-
cluster-admin
권한이 있는 사용자로 OpenShift Container Platform 웹 콘솔에 로그인되어 있습니다. - 클러스터는 AWS를 플랫폼 유형 및 클라우드 공급자로 구성합니다.
-
OpenShift CLI(
oc
)에 로그인되어 있습니다.
프로세스
Namespace
오브젝트를 생성합니다.Namespace
오브젝트를 정의하는 YAML 파일을 생성합니다.namespace.yaml
파일 예apiVersion: v1 kind: Namespace metadata: name: aws-load-balancer-operator
다음 명령을 실행하여
Namespace
오브젝트를 생성합니다.$ oc apply -f namespace.yaml
OperatorGroup
오브젝트를 생성합니다.OperatorGroup
오브젝트를 정의하는 YAML 파일을 생성합니다.operatorgroup.yaml
파일 예apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: aws-lb-operatorgroup namespace: aws-load-balancer-operator spec: upgradeStrategy: Default
다음 명령을 실행하여
OperatorGroup
오브젝트를 생성합니다.$ oc apply -f operatorgroup.yaml
Subscription
오브젝트를 생성합니다.Subscription
오브젝트를 정의하는 YAML 파일을 생성합니다.subscription.yaml
파일의 예apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: aws-load-balancer-operator namespace: aws-load-balancer-operator spec: channel: stable-v1 installPlanApproval: Automatic name: aws-load-balancer-operator source: redhat-operators sourceNamespace: openshift-marketplace
다음 명령을 실행하여
Subscription
오브젝트를 생성합니다.$ oc apply -f subscription.yaml
검증
서브스크립션에서 설치 계획의 이름을 가져옵니다.
$ oc -n aws-load-balancer-operator \ get subscription aws-load-balancer-operator \ --template='{{.status.installplan.name}}{{"\n"}}'
설치 계획의 상태를 확인합니다.
$ oc -n aws-load-balancer-operator \ get ip <install_plan_name> \ --template='{{.status.phase}}{{"\n"}}'
출력은
Complete
여야 합니다.
6.2.4. AWS STS를 사용하는 클러스터에 AWS Load Balancer Operator 설치
STS(Security Token Service)를 사용하는 클러스터에 AWS(Amazon Web Services) 로드 밸런서 Operator를 설치할 수 있습니다. 다음 단계에 따라 Operator를 설치하기 전에 클러스터를 준비합니다.
AWS Load Balancer Operator는 CredentialsRequest
오브젝트를 사용하여 Operator 및 AWS Load Balancer 컨트롤러를 부트스트랩합니다. AWS Load Balancer Operator는 필요한 시크릿을 생성하고 사용할 수 있을 때까지 기다립니다.
6.2.4.1. 사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. 클러스터의 인프라 ID를 알고 있습니다. 이 ID를 표시하려면 CLI에서 다음 명령을 실행합니다.
$ oc get infrastructure cluster -o=jsonpath="{.status.infrastructureName}"
클러스터의 OpenID Connect(OIDC) DNS 정보를 알고 있습니다. 이 정보를 표시하려면 CLI에 다음 명령을 입력합니다.
$ oc get authentication.config cluster -o=jsonpath="{.spec.serviceAccountIssuer}" 1
-
AWS 웹 콘솔에 로그인한 후 IAM
액세스 관리 ID 공급자로 이동하여 OIDC Amazon Resource Name(ARN) 정보가 있습니다. OIDC ARN 예제는 arn:aws:iam::777777777:oidc-provider/<oidc_dns_url
>입니다.
6.2.4.2. AWS Load Balancer Operator에 대한 IAM 역할 생성
STS를 사용하는 클러스터에 AWS Load Balancer Operator를 설치하려면 추가 AWS(Amazon Web Services) IAM(Identity and Access Management) 역할이 필요합니다. 서브넷 및 VPC(Virtual Private Clouds)와 상호 작용하려면 IAM 역할이 필요합니다. AWS Load Balancer Operator는 부트스트랩 자체를 위해 IAM 역할로 CredentialsRequest
오브젝트를 생성합니다.
다음 옵션을 사용하여 IAM 역할을 생성할 수 있습니다.
-
Cloud Credential Operator 유틸리티(
ccoctl
) 및 사전 정의된CredentialsRequest
오브젝트 사용 - AWS CLI 및 사전 정의된 AWS 매니페스트 사용
환경에서 ccoctl
명령을 지원하지 않는 경우 AWS CLI를 사용합니다.
6.2.4.2.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자 미만이어야 합니다.
6.2.4.2.2. AWS CLI를 사용하여 AWS IAM 역할 생성
AWS 명령줄 인터페이스를 사용하여 AWS Load Balancer Operator에 대한 IAM 역할을 생성할 수 있습니다. IAM 역할은 서브넷 및 VPC(Virtual Private Clouds)와 상호 작용하는 데 사용됩니다.
사전 요구 사항
-
AWS 명령줄 인터페이스(
aws
)에 액세스할 수 있어야 합니다.
프로세스
다음 명령을 실행하여 ID 공급자를 사용하여 신뢰 정책 파일을 생성합니다.
$ cat <<EOF > albo-operator-trust-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "<oidc_arn>" 1 }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "<cluster_oidc_endpoint>:sub": "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-cluster" 2 } } } ] } EOF
- 1
arn:aws:iam::777777:oidc-provider/rh-oidc.s3.us-east-1.amazonaws.com/28292va7ad7mr9r4he1fb09b14t59t59t4f
와 같은 OIDC ID 공급자의 Amazon Resource Name(ARN)을 지정합니다.- 2
- AWS Load Balancer Controller의 서비스 계정을 지정합니다. <
cluster_oidc_endpoint
>의 예는rh-oidc.s3.us-east-1.amazonaws.com/28292va7ad7mr9r4he1f09b14t59t4f
입니다.
다음 명령을 실행하여 생성된 신뢰 정책으로 IAM 역할을 생성합니다.
$ aws iam create-role --role-name albo-operator --assume-role-policy-document file://albo-operator-trust-policy.json
출력 예
ROLE arn:aws:iam::<aws_account_number>:role/albo-operator 2023-08-02T12:13:22Z 1 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/<cluster_oidc_endpoint>
- 1
- AWS Load Balancer Operator에 대해 생성된 AWS IAM 역할의 ARN(예:
arn:aws:iam::777777777:role/albo-operator
)에 유의하십시오.
다음 명령을 실행하여 AWS Load Balancer Operator에 대한 권한 정책을 다운로드합니다.
$ curl -o albo-operator-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/operator-permission-policy.json
다음 명령을 실행하여 AWS Load Balancer Controller의 권한 정책을 IAM 역할에 연결합니다.
$ aws iam put-role-policy --role-name albo-operator --policy-name perms-policy-albo-operator --policy-document file://albo-operator-permission-policy.json
6.2.4.3. AWS Load Balancer Operator의 ARN 역할 구성
AWS Load Balancer Operator에 대한 Amazon 리소스 이름(ARN) 역할을 환경 변수로 구성할 수 있습니다. CLI를 사용하여 ARN 역할을 구성할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다.
프로세스
다음 명령을 실행하여
aws-load-balancer-operator
프로젝트를 생성합니다.$ oc new-project 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: "<albo_role_arn>" 1 EOF
- 1
CredentialsRequest
에서 AWS Load Balancer Operator의 AWS 인증 정보를 프로비저닝하는 데 사용할 ARN 역할을 지정합니다. <albo_role_arn
>의 예는arn:aws:iam::<aws_account_number>:role/albo-operator
입니다.
참고AWS Load Balancer Operator는
사용 가능
상태로 이동하기 전에 보안이 생성될 때까지 기다립니다.
6.2.4.4. AWS Load Balancer Controller의 IAM 역할 생성
AWS Load Balancer 컨트롤러의 CredentialsRequest
오브젝트는 수동으로 프로비저닝된 IAM 역할을 사용하여 설정해야 합니다.
다음 옵션을 사용하여 IAM 역할을 생성할 수 있습니다.
-
Cloud Credential Operator 유틸리티(
ccoctl
) 및 사전 정의된CredentialsRequest
오브젝트 사용 - AWS CLI 및 사전 정의된 AWS 매니페스트 사용
환경에서 ccoctl
명령을 지원하지 않는 경우 AWS CLI를 사용합니다.
6.2.4.4.1. 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자 미만이어야 합니다.
6.2.4.4.2. AWS CLI를 사용하여 컨트롤러에 대한 AWS IAM 역할 생성
AWS 명령줄 인터페이스를 사용하여 AWS Load Balancer Controller에 대한 AWS IAM 역할을 생성할 수 있습니다. AWS IAM 역할은 서브넷 및 VPC(Virtual Private Clouds)와 상호 작용하는 데 사용됩니다.
사전 요구 사항
-
AWS 명령줄 인터페이스(
aws
)에 액세스할 수 있어야 합니다.
프로세스
다음 명령을 실행하여 ID 공급자를 사용하여 신뢰 정책 파일을 생성합니다.
$ cat <<EOF > albo-controller-trust-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "<oidc_arn>" 1 }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "<cluster_oidc_endpoint>:sub": "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-cluster" 2 } } } ] } EOF
- 1
arn:aws:iam::777777:oidc-provider/rh-oidc.s3.us-east-1.amazonaws.com/28292va7ad7mr9r4he1fb09b14t59t59t4f
와 같은 OIDC ID 공급자의 Amazon Resource Name(ARN)을 지정합니다.- 2
- AWS Load Balancer Controller의 서비스 계정을 지정합니다. <
cluster_oidc_endpoint
>의 예는rh-oidc.s3.us-east-1.amazonaws.com/28292va7ad7mr9r4he1f09b14t59t4f
입니다.
다음 명령을 실행하여 생성된 신뢰 정책으로 AWS IAM 역할을 생성합니다.
$ aws iam create-role --role-name albo-controller --assume-role-policy-document file://albo-controller-trust-policy.json
출력 예
ROLE arn:aws:iam::<aws_account_number>:role/albo-controller 2023-08-02T12:13:22Z 1 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/<cluster_oidc_endpoint>
- 1
- AWS Load Balancer Controller에 대한 AWS IAM 역할의 ARN(예:
arn:aws:iam::777777:role/albo-controller
)을 확인합니다.
다음 명령을 실행하여 AWS Load Balancer Controller에 대한 권한 정책을 다운로드합니다.
$ curl -o albo-controller-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/assets/iam-policy.json
다음 명령을 실행하여 AWS Load Balancer Controller의 권한 정책을 AWS IAM 역할에 연결합니다.
$ aws iam put-role-policy --role-name albo-controller --policy-name perms-policy-albo-controller --policy-document file://albo-controller-permission-policy.json
AWSLoadBalancerController
오브젝트를 정의하는 YAML 파일을 생성합니다.sample-aws-lb-manual-creds.yaml
파일의 예apiVersion: networking.olm.openshift.io/v1 kind: AWSLoadBalancerController 1 metadata: name: cluster 2 spec: credentialsRequestConfig: stsIAMRoleARN: <albc_role_arn> 3
6.2.4.5. 추가 리소스
6.2.5. AWS Load Balancer 컨트롤러 인스턴스 생성
AWS Load Balancer Operator를 설치한 후 AWS Load Balancer 컨트롤러를 생성할 수 있습니다.
6.2.5.1. AWS Load Balancer 컨트롤러 생성
클러스터에 AWSLoadBalancerController
오브젝트의 단일 인스턴스만 설치할 수 있습니다. CLI를 사용하여 AWS Load Balancer 컨트롤러를 생성할 수 있습니다. AWS Load Balancer Operator는 resource라는 클러스터
만 조정합니다.
사전 요구 사항
-
echoserver
네임스페이스를 생성했습니다. -
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 컨트롤러 이름을 정의합니다. 이 인스턴스 이름은 모든 관련 리소스에 접미사로 추가됩니다.
- 3
- AWS Load Balancer Controller의 서브넷 태그 지정 방법을 구성합니다. 다음 값이 유효합니다.
-
Auto
: AWS Load Balancer Operator는 클러스터에 속하는 서브넷을 결정하고 적절하게 태그를 지정합니다. 내부 서브넷 태그가 내부 서브넷에 없으면 Operator에서 역할을 올바르게 확인할 수 없습니다. -
Manual
: 적절한 역할 태그를 사용하여 클러스터에 속한 서브넷에 수동으로 태그를 지정합니다. 사용자 제공 인프라에 클러스터를 설치한 경우 이 옵션을 사용합니다.
-
- 4
- AWS 리소스를 프로비저닝할 때 AWS Load Balancer 컨트롤러에서 사용하는 태그를 정의합니다.
- 5
- 수신 클래스 이름을 정의합니다. 기본값은
alb
입니다. - 6
- AWS Load Balancer 컨트롤러의 복제본 수를 지정합니다.
- 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
6.2.6. 단일 AWS Load Balancer를 통해 여러 수신 리소스 제공
단일 AWS Load Balancer를 통해 트래픽을 단일 도메인에 속하는 다양한 서비스로 라우팅할 수 있습니다. 각 Ingress 리소스는 도메인의 다른 끝점을 제공합니다.
6.2.6.1. 단일 AWS Load Balancer를 통해 여러 수신 리소스 생성
CLI를 사용하여 단일 AWS Load Balancer를 통해 트래픽을 여러 수신 리소스로 라우팅할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)에 액세스할 수 있습니다.
프로세스
다음과 같이
IngressClassParams
리소스 YAML 파일을 생성합니다(예:sample-single-lb-params.yaml
).apiVersion: elbv2.k8s.aws/v1beta1 1 kind: IngressClassParams metadata: name: single-lb-params 2 spec: group: name: single-lb 3
다음 명령을 실행하여
IngressClassParams
리소스를 생성합니다.$ oc create -f sample-single-lb-params.yaml
다음과 같이
IngressClass
리소스 YAML 파일을 생성합니다(예:sample-single-lb-class.yaml
).apiVersion: networking.k8s.io/v1 1 kind: IngressClass metadata: name: single-lb 2 spec: controller: ingress.k8s.aws/alb 3 parameters: apiGroup: elbv2.k8s.aws 4 kind: IngressClassParams 5 name: single-lb-params 6
다음 명령을 실행하여
IngressClass
리소스를 생성합니다.$ oc create -f sample-single-lb-class.yaml
다음과 같이
AWSLoadBalancerController
리소스 YAML 파일을 생성합니다(예:sample-single-lb.yaml
).apiVersion: networking.olm.openshift.io/v1 kind: AWSLoadBalancerController metadata: name: cluster spec: subnetTagging: Auto ingressClass: single-lb 1
- 1
IngressClass
리소스의 이름을 정의합니다.
다음 명령을 실행하여
AWSLoadBalancerController
리소스를 생성합니다.$ oc create -f sample-single-lb.yaml
다음과 같이
Ingress
리소스 YAML 파일(예:sample-multiple-ingress.yaml
)을 생성합니다.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-1 1 annotations: alb.ingress.kubernetes.io/scheme: internet-facing 2 alb.ingress.kubernetes.io/group.order: "1" 3 alb.ingress.kubernetes.io/target-type: instance 4 spec: ingressClassName: single-lb 5 rules: - host: example.com 6 http: paths: - path: /blog 7 pathType: Prefix backend: service: name: example-1 8 port: number: 80 9 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-2 annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/group.order: "2" alb.ingress.kubernetes.io/target-type: instance spec: ingressClassName: single-lb rules: - host: example.com http: paths: - path: /store pathType: Prefix backend: service: name: example-2 port: number: 80 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-3 annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/group.order: "3" alb.ingress.kubernetes.io/target-type: instance spec: ingressClassName: single-lb rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: example-3 port: number: 80
- 1
- 수신 이름을 지정합니다.
- 2
- 인터넷에 액세스하기 위해 공용 서브넷에서 프로비저닝할 로드 밸런서를 나타냅니다.
- 3
- 로드 밸런서에서 요청을 수신할 때 여러 수신 리소스의 규칙과 일치하는 순서를 지정합니다.
- 4
- 로드 밸런서가 OpenShift Container Platform 노드를 대상으로 서비스에 도달하도록 지정합니다.
- 5
- 이 수신에 속하는 Ingress 클래스를 지정합니다.
- 6
- 요청 라우팅에 사용되는 도메인 이름을 정의합니다.
- 7
- 서비스로 라우팅해야 하는 경로를 정의합니다.
- 8
Ingress
리소스에 구성된 엔드포인트를 제공하는 서비스 이름을 정의합니다.- 9
- 엔드포인트를 제공하는 서비스의 포트를 정의합니다.
다음 명령을 실행하여
Ingress
리소스를 생성합니다.$ oc create -f sample-multiple-ingress.yaml
6.2.7. TLS 종료 추가
AWS Load Balancer에서 TLS 종료를 추가할 수 있습니다.
6.2.7.1. AWS Load Balancer에 TLS 종료 추가
도메인의 트래픽을 서비스의 Pod로 라우팅하고 AWS Load Balancer에서 TLS 종료를 추가할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)에 액세스할 수 있습니다.
프로세스
AWSLoadBalancerController
리소스를 정의하는 YAML 파일을 생성합니다.add-tls-termination-albc.yaml
파일 예apiVersion: networking.olm.openshift.io/v1 kind: AWSLoadBalancerController metadata: name: cluster spec: subnetTagging: Auto ingressClass: tls-termination 1
- 1
- 수신 클래스 이름을 정의합니다. Ingress 클래스가 클러스터에 없으면 AWS Load Balancer 컨트롤러가 하나를 생성합니다.
spec.controller
가ingress.k8s.aws/alb
로 설정된 경우 AWS Load Balancer 컨트롤러는 추가 ingress 클래스 값을 조정합니다.
Ingress
리소스를 정의하는 YAML 파일을 생성합니다.add-tls-termination-ingress.yaml
파일의 예apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: <example> 1 annotations: alb.ingress.kubernetes.io/scheme: internet-facing 2 alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:xxxxx 3 spec: ingressClassName: tls-termination 4 rules: - host: <example.com> 5 http: paths: - path: / pathType: Exact backend: service: name: <example-service> 6 port: number: 80
6.2.8. 클러스터 전체 프록시 구성
AWS Load Balancer Operator에서 클러스터 전체 프록시를 구성할 수 있습니다. 클러스터 전체 프록시를 구성한 후 OLM(Operator Lifecycle Manager)은 HTTP_PROXY
,HTTPS_PROXY
, NO_PROXY
와 같은 환경 변수로 Operator의 모든 배포를 자동으로 업데이트합니다. 이러한 변수는 AWS Load Balancer Operator에 의해 관리되는 컨트롤러에 채워집니다.
6.2.8.1. 클러스터 전체 프록시의 인증 기관 신뢰
다음 명령을 실행하여
aws-load-balancer-operator
네임스페이스에 CA(인증 기관) 번들을 포함할 구성 맵을 생성합니다.$ oc -n aws-load-balancer-operator create configmap trusted-ca
신뢰할 수 있는 CA 번들을 구성 맵에 삽입하려면 다음 명령을 실행하여
config.openshift.io/inject-trusted-cabundle=true
레이블을 구성 맵에 추가합니다.$ oc -n aws-load-balancer-operator label cm trusted-ca config.openshift.io/inject-trusted-cabundle=true
다음 명령을 실행하여 AWS Load Balancer Operator 서브스크립션을 업데이트하여 AWS Load Balancer Operator 배포의 구성 맵에 액세스합니다.
$ oc -n aws-load-balancer-operator patch subscription aws-load-balancer-operator --type='merge' -p '{"spec":{"config":{"env":[{"name":"TRUSTED_CA_CONFIGMAP_NAME","value":"trusted-ca"}],"volumes":[{"name":"trusted-ca","configMap":{"name":"trusted-ca"}}],"volumeMounts":[{"name":"trusted-ca","mountPath":"/etc/pki/tls/certs/albo-tls-ca-bundle.crt","subPath":"ca-bundle.crt"}]}}}'
AWS Load Balancer Operator가 배포된 후 다음 명령을 실행하여 CA 번들이
aws-load-balancer-operator-controller-manager
배포에 추가되었는지 확인합니다.$ oc -n aws-load-balancer-operator exec deploy/aws-load-balancer-operator-controller-manager -c manager -- bash -c "ls -l /etc/pki/tls/certs/albo-tls-ca-bundle.crt; printenv TRUSTED_CA_CONFIGMAP_NAME"
출력 예
-rw-r--r--. 1 root 1000690000 5875 Jan 11 12:25 /etc/pki/tls/certs/albo-tls-ca-bundle.crt trusted-ca
선택 사항: 다음 명령을 실행하여 구성 맵이 변경될 때마다 AWS Load Balancer Operator 배포를 다시 시작합니다.
$ oc -n aws-load-balancer-operator rollout restart deployment/aws-load-balancer-operator-controller-manager