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 바이너리를 추출하고 준비해야 합니다.

프로세스

  1. 다음 명령을 실행하여 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
  2. 다음 명령을 실행하여 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 바이너리를 추출하고 준비해야 합니다.

프로세스

  1. 다음 명령을 실행하여 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
  2. 다음 명령을 실행하여 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에 있는지 확인해야 합니다.

프로세스

  1. 다음 명령을 실행하여 클러스터 인프라 ID와 클러스터 OpenID Connect(OIDC) DNS를 식별합니다.

    1. ROSA 클러스터 ID를 식별합니다.

      $ rosa describe cluster --cluster=<cluster_name> | grep -i 'Infra ID'

      또는

      $ oc get infrastructure cluster -o json | jq -r '.status.infrastructureName'
    2. 다음 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}"
    3. IAM 액세스 관리 ID 공급자로 이동하여 AWS 웹 콘솔에서 OIDC ARM(Amazon Resource Name) 정보를 찾습니다. OIDC ARN 예제는 arn:aws:iam::777777777:oidc-provider/<oidc_dns_url >입니다.
    4. 명령의 출력을 저장합니다. 이 정보는 이 절차의 향후 단계에서 사용됩니다.
  2. AWS CLI를 사용하여 AWS Load Balancer Operator에 필요한 AWS IAM 정책을 생성합니다.

    1. dedicated-admin 역할의 사용자로 ROSA 클러스터에 로그인하고 다음 명령을 사용하여 새 프로젝트를 생성합니다.

      $ oc new-project aws-load-balancer-operator
    2. 새로 생성된 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로 바꿉니다.
    3. 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 내에서 / 를 따르는 영숫자 정보만 필요합니다.

    4. 생성된 신뢰 정책을 사용하여 역할을 생성하고 확인합니다.

      $ 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 역할의 일부가 AWS Load Balancer Operator에 대해 생성되었습니다.

    5. 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
  3. AWS CLI를 사용하여 AWS 로드 밸런서 컨트롤러에 필요한 AWS IAM 정책을 생성합니다.

    1. 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
    2. 생성된 신뢰 정책을 사용하여 역할을 생성하고 확인합니다.

      $ 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 )

    3. 컨트롤러의 권한 정책을 역할에 연결합니다.

      $ 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
  4. HCP 클러스터가 있는 ROSA의 경우 서브넷 검색에 필요한 태그를 추가합니다.

    1. ROSA 클러스터를 호스팅하는 VPC 및 모든 서브넷에 다음 {Key: Value} 태그를 추가합니다. {Cluster Infra ID} 를 이전에 지정한 Infra ID로 바꿉니다.

      kubernetes.io/cluster/${Cluster Infra ID}:owned
    2. 다음 ELBv2 {Key: Value} 태그를 프라이빗 서브넷에 추가하고 필요한 경우 퍼블릭 서브넷에 추가합니다.

      • 프라이빗 서브넷: kubernetes.io/role/internal-elb:1
      • 퍼블릭 서브넷: kubernetes.io/role/elb:1

        참고

        인터넷 및 내부 로드 밸런서는 이러한 서브넷이 속한 AWS 가용 영역 내에 생성됩니다.

        중요

        AWS Load Balancer Operator에서 생성한 ELBv2 리소스(예: ALB 및 NLB)는 ROSA 클러스터에 설정된 사용자 정의 태그를 상속하지 않습니다. 이러한 리소스에 대해 태그를 별도로 설정해야 합니다.

  5. 다음 단계를 완료하여 AWS Load Balancer Operator를 생성합니다.

    1. 다음 명령을 실행하여 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
    2. 다음 명령을 실행하여 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 입니다.
  6. 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를 동시에 사용할 수 있습니다.

검증

  1. 다음 명령을 실행하여 설치에 성공했는지 확인합니다.

    1. 프로젝트 내에서 Pod에 대한 정보를 수집합니다.

      $ oc get pods -n aws-load-balancer-operator
    2. 프로젝트 내에서 로그를 확인합니다.

      $ oc logs -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager -c manager

추가 리소스

2.1.4. AWS Load Balancer Operator 설치 제거

AWS Load Balancer Operator를 설치 제거하고 관련 리소스를 전체적으로 정리하려면 다음 절차를 수행합니다.

프로세스

  1. ALBO에서 생성 및 관리하는 로드 밸런서를 삭제하여 샘플 애플리케이션을 정리합니다. 로드 밸런서를 삭제하는 방법에 대한 자세한 내용은 애플리케이션 로드 밸런서 삭제를 참조하십시오.
  2. 서브넷 검색 및 ALB(Application Load Balancer) 생성을 위해 서브넷에 추가된 VPC 태그를 제거하여 AWS VPC 태그를 정리합니다. 자세한 내용은 태그 기본 을 참조하십시오.
  3. AWS Load Balancer Operator와 Application Load Balancer Controller를 모두 삭제하여 AWS Load Balancer Operator 구성 요소를 정리합니다. 자세한 내용은 클러스터에서 Operator 삭제를 참조하십시오.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.