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 컨트롤러의 라이프사이클을 관리합니다.

작은 정보

AWS Load Balancer Operator에서 생성한 로드 밸런서는 OpenShift 경로에 사용할 수 없으며 OpenShift 경로 의 전체 계층 7 기능이 필요하지 않은 개별 서비스 또는 인그레스 리소스에만 사용해야 합니다.

AWS Load Balancer 컨트롤러는 AWS(ROSA) 클러스터에서 Red Hat OpenShift Service의 AWS Elastic Load Balancer를 관리합니다. 컨트롤러는 LoadBalancer 유형의 Kubernetes 서비스 리소스를 구현할 때 Kubernetes Ingress 리소스 및 AWS NLB(Network Load Balancer)를 생성할 때 AWS Application Load Balancer( ALB )를 프로비저닝합니다.

기본 AWS in-tree 로드 밸런서 공급자와 비교하여 이 컨트롤러는 ALB 및 NLB 모두에 대한 고급 주석으로 개발됩니다. 일부 고급 사용 사례는 다음과 같습니다.

  • ALB에서 네이티브 Kubernetes Ingress 오브젝트 사용
  • ALB를 AWS Web Application Firewall(WAF) 서비스와 통합
  • 사용자 정의 NLB 소스 IP 범위 지정
  • 사용자 정의 NLB 내부 IP 주소 지정

AWS Load Balancer Operator 는 ROSA 클러스터에서 aws-load-balancer-controller 인스턴스를 설치, 관리 및 구성하는 데 사용됩니다.

2.1.1. AWS Load Balancer Operator를 설치하도록 환경 설정

AWS Load Balancer Operator에는 여러 가용 영역(AZ)이 있는 클러스터와 클러스터와 동일한 가상 프라이빗 클라우드(VPC)의 3개의 퍼블릭 서브넷이 분할되어야 합니다.

중요

이러한 요구 사항으로 인해 많은 PrivateLink 클러스터에 AWS Load Balancer Operator가 적합하지 않을 수 있습니다. AWS NLB에는 이러한 제한이 없습니다.

AWS Load Balancer Operator를 설치하기 전에 다음을 구성해야 합니다.

  • 여러 가용성 영역이 있는 ROSA(클래식 아키텍처) 클러스터
  • BYO VPC 클러스터
  • AWS CLI
  • OC CLI

2.1.1.1. AWS Load Balancer Operator 환경 설정

선택 사항: 임시 환경 변수를 설정하여 설치 명령을 간소화할 수 있습니다.

참고

환경 변수를 사용하지 않으려면 코드 조각에 묻는 값을 수동으로 입력합니다.

프로세스

  1. admin 사용자로 클러스터에 로그인한 후 다음 명령을 실행합니다.

    $ export CLUSTER_NAME=$(oc get infrastructure cluster -o=jsonpath="{.status.infrastructureName}")
    $ 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/${CLUSTER_NAME}/alb-operator"
    $ mkdir -p ${SCRATCH}
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 변수가 설정되었는지 확인할 수 있습니다.

    $ echo "Cluster name: ${CLUSTER_NAME}, Region: ${REGION}, OIDC Endpoint: ${OIDC_ENDPOINT}, AWS Account ID: ${AWS_ACCOUNT_ID}"
    Copy to Clipboard Toggle word wrap

    출력 예

    Cluster name: <cluster_id>, Region: us-east-2, OIDC Endpoint: oidc.op1.openshiftapps.com/<oidc_id>, AWS Account ID: <aws_id>
    Copy to Clipboard Toggle word wrap

2.1.1.2. AWS VPC 및 서브넷

AWS Load Balancer Operator를 설치하려면 먼저 AWS VPC 리소스에 태그를 지정해야 합니다.

프로세스

  1. ROSA 배포의 적절한 값으로 환경 변수를 설정합니다.

    $ export VPC_ID=<vpc-id>
    $ export PUBLIC_SUBNET_IDS="<public-subnet-a-id> <public-subnet-b-id> <public-subnet-c-id>"
    $ export PRIVATE_SUBNET_IDS="<private-subnet-a-id> <private-subnet-b-id> <private-subnet-c-id>"
    Copy to Clipboard Toggle word wrap
  2. 클러스터 이름을 사용하여 클러스터의 VPC에 태그를 추가합니다.

    $ aws ec2 create-tags --resources ${VPC_ID} --tags Key=kubernetes.io/cluster/${CLUSTER_NAME},Value=owned --region ${REGION}
    Copy to Clipboard Toggle word wrap
  3. 퍼블릭 서브넷에 태그를 추가합니다.

    $ aws ec2 create-tags \
         --resources ${PUBLIC_SUBNET_IDS} \
         --tags Key=kubernetes.io/role/elb,Value='' \
         --region ${REGION}
    Copy to Clipboard Toggle word wrap
  4. 프라이빗 서브넷에 태그를 추가합니다.

    $ aws ec2 create-tags \
         --resources ${PRIVATE_SUBNET_IDS} \
         --tags Key=kubernetes.io/role/internal-elb,Value='' \
         --region ${REGION}
    Copy to Clipboard Toggle word wrap

2.1.2. AWS Load Balancer Operator 설치

클러스터로 환경을 설정한 후 CLI를 사용하여 AWS Load Balancer Operator를 설치할 수 있습니다.

프로세스

  1. AWS Load Balancer Operator에 대한 클러스터 내에 새 프로젝트를 생성합니다.

    $ oc new-project aws-load-balancer-operator
    Copy to Clipboard Toggle word wrap
  2. AWS Load Balancer Controller에 대한 AWS IAM 정책을 생성합니다.

    참고

    업스트림 AWS Load Balancer 컨트롤러 정책에서 AWS IAM 정책을 찾을 수 있습니다. 이 정책에는 Operator가 작동하는 데 필요한 모든 권한이 포함됩니다.

    $ POLICY_ARN=$(aws iam list-policies --query \
          "Policies[?PolicyName=='aws-load-balancer-operator-policy'].{ARN:Arn}" \
          --output text)
    $ if [[ -z "${POLICY_ARN}" ]]; then
         wget -O "${SCRATCH}/load-balancer-operator-policy.json" \
            https://raw.githubusercontent.com/rh-mobb/documentation/main/content/rosa/aws-load-balancer-operator/load-balancer-operator-policy.json
         POLICY_ARN=$(aws --region "$REGION" --query Policy.Arn \
         --output text iam create-policy \
         --policy-name aws-load-balancer-operator-policy \
         --policy-document "file://${SCRATCH}/load-balancer-operator-policy.json")
    fi
    $ echo $POLICY_ARN
    Copy to Clipboard Toggle word wrap
  3. AWS Load Balancer Operator에 대한 AWS IAM 신뢰 정책을 생성합니다.

    $ cat <<EOF > "${SCRATCH}/trust-policy.json"
    {
     "Version": "2012-10-17",
     "Statement": [
     {
     "Effect": "Allow",
     "Condition": {
       "StringEquals" : {
         "${OIDC_ENDPOINT}:sub": ["system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-operator-controller-manager", "system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-cluster"]
       }
     },
     "Principal": {
       "Federated": "arn:aws:iam::$AWS_ACCOUNT_ID:oidc-provider/${OIDC_ENDPOINT}"
     },
     "Action": "sts:AssumeRoleWithWebIdentity"
     }
     ]
    }
    EOF
    Copy to Clipboard Toggle word wrap
  4. AWS Load Balancer Operator에 대한 AWS IAM 역할을 생성합니다.

    $ ROLE_ARN=$(aws iam create-role --role-name "${ROSA_CLUSTER_NAME}-alb-operator" \
       --assume-role-policy-document "file://${SCRATCH}/trust-policy.json" \
       --query Role.Arn --output text)
    $ echo $ROLE_ARN
    
    $ aws iam attach-role-policy --role-name "${ROSA_CLUSTER_NAME}-alb-operator" \
         --policy-arn $POLICY_ARN
    Copy to Clipboard Toggle word wrap
  5. AWS Load Balancer Operator가 새로 생성된 AWS IAM 역할을 가정할 시크릿을 생성합니다.

    $ cat << EOF | oc apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: aws-load-balancer-operator
      namespace: aws-load-balancer-operator
    stringData:
      credentials: |
        [default]
        role_arn = $ROLE_ARN
        web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token
    EOF
    Copy to Clipboard Toggle word wrap
  6. AWS Load Balancer Operator를 설치합니다.

    $ cat << EOF | oc apply -f -
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: aws-load-balancer-operator
      namespace: aws-load-balancer-operator
    spec:
      upgradeStrategy: Default
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: aws-load-balancer-operator
      namespace: aws-load-balancer-operator
    spec:
      channel: stable-v1.0
      installPlanApproval: Automatic
      name: aws-load-balancer-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      startingCSV: aws-load-balancer-operator.v1.0.0
    EOF
    Copy to Clipboard Toggle word wrap
  7. Operator를 사용하여 AWS Load Balancer 컨트롤러 인스턴스를 배포합니다.

    참고

    여기에서 오류가 발생하면 1분 정도 기다린 후 다시 시도하면 Operator가 아직 설치를 완료하지 않은 것입니다.

    $ cat << EOF | oc apply -f -
    apiVersion: networking.olm.openshift.io/v1
    kind: AWSLoadBalancerController
    metadata:
      name: cluster
    spec:
      credentials:
        name: aws-load-balancer-operator
    EOF
    Copy to Clipboard Toggle word wrap
  8. Operator 및 컨트롤러 Pod가 둘 다 실행 중인지 확인합니다.

    $ oc -n aws-load-balancer-operator get pods
    Copy to Clipboard Toggle word wrap

    잠시 대기하지 않고 다시 시도하면 다음이 표시됩니다.

    NAME                                                             READY   STATUS    RESTARTS   AGE
    aws-load-balancer-controller-cluster-6ddf658785-pdp5d            1/1     Running   0          99s
    aws-load-balancer-operator-controller-manager-577d9ffcb9-w6zqn   2/2     Running   0          2m4s
    Copy to Clipboard Toggle word wrap

2.1.2.1. 배포 검증

  1. 새 프로젝트를 생성합니다.

    $ oc new-project hello-world
    Copy to Clipboard Toggle word wrap
  2. hello world 애플리케이션을 배포합니다.

    $ oc new-app -n hello-world --image=docker.io/openshift/hello-openshift
    Copy to Clipboard Toggle word wrap
  3. AWS ALB에 연결하도록 NodePort 서비스를 구성합니다.

    $ cat << EOF | oc apply -f -
    apiVersion: v1
    kind: Service
    metadata:
      name: hello-openshift-nodeport
      namespace: hello-world
    spec:
      ports:
        - port: 80
          targetPort: 8080
          protocol: TCP
      type: NodePort
      selector:
        deployment: hello-openshift
    EOF
    Copy to Clipboard Toggle word wrap
  4. AWS Load Balancer Operator를 사용하여 AWS ALB를 배포합니다.

    $ cat << EOF | oc apply -f -
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: hello-openshift-alb
      namespace: hello-world
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Exact
                backend:
                  service:
                    name: hello-openshift-nodeport
                    port:
                      number: 80
    EOF
    Copy to Clipboard Toggle word wrap
  5. AWS ALB Ingress 끝점을 curl하여 hello world 애플리케이션에 액세스할 수 있는지 확인합니다.

    참고

    AWS ALB 프로비저닝에는 몇 분이 걸립니다. curl: (6) 호스트를 해결할 수 없는 오류가 발생하면 기다렸다가 다시 시도하십시오.

    $ INGRESS=$(oc -n hello-world get ingress hello-openshift-alb \
        -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    $ curl "http://${INGRESS}"
    Copy to Clipboard Toggle word wrap

    출력 예

    Hello OpenShift!
    Copy to Clipboard Toggle word wrap

  6. hello world 애플리케이션에 사용할 AWS NLB를 배포합니다.

    $ cat << EOF | oc apply -f -
    apiVersion: v1
    kind: Service
    metadata:
      name: hello-openshift-nlb
      namespace: hello-world
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: external
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: instance
        service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    spec:
      ports:
        - port: 80
          targetPort: 8080
          protocol: TCP
      type: LoadBalancer
      selector:
        deployment: hello-openshift
    EOF
    Copy to Clipboard Toggle word wrap
  7. AWS NLB 끝점을 테스트합니다.

    참고

    NLB 프로비저닝에는 몇 분이 걸립니다. curl: (6) 호스트를 해결할 수 없는 오류가 발생하면 기다렸다가 다시 시도하십시오.

    $ NLB=$(oc -n hello-world get service hello-openshift-nlb \
      -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    $ curl "http://${NLB}"
    Copy to Clipboard Toggle word wrap

    출력 예

    Hello OpenShift!
    Copy to Clipboard Toggle word wrap

2.1.3. AWS Load Balancer Operator 설치 예 삭제

  1. hello world 애플리케이션 네임스페이스(및 네임스페이스의 모든 리소스)를 삭제합니다.

    $ oc delete project hello-world
    Copy to Clipboard Toggle word wrap
  2. AWS Load Balancer Operator 및 AWS IAM 역할을 삭제합니다.

    $ oc delete subscription aws-load-balancer-operator -n aws-load-balancer-operator
    $ aws iam detach-role-policy \
      --role-name "${ROSA_CLUSTER_NAME}-alb-operator" \
      --policy-arn $POLICY_ARN
    $ aws iam delete-role \
      --role-name "${ROSA_CLUSTER_NAME}-alb-operator"
    Copy to Clipboard Toggle word wrap
  3. AWS IAM 정책을 삭제합니다.

    $ aws iam delete-policy --policy-arn $POLICY_ARN
    Copy to Clipboard Toggle word wrap
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2026 Red Hat
맨 위로 이동