21.4. AWS 로드 밸런서 컨트롤러 인스턴스 생성

Operator를 설치한 후 AWS 로드 밸런서 컨트롤러의 인스턴스를 생성할 수 있습니다.

21.4.1. AWS Load Balancer Operator를 사용하여 AWS Load Balancer 컨트롤러 인스턴스 생성

클러스터에 aws-load-balancer-controller 의 단일 인스턴스만 설치할 수 있습니다. CLI를 사용하여 AWS Load Balancer 컨트롤러를 생성할 수 있습니다. AWS Load Balancer(ALB) Operator는 이름이 cluster 인 리소스만 조정합니다.

사전 요구 사항

  • echoserver 네임스페이스를 생성했습니다.
  • OpenShift CLI(oc)에 액세스할 수 있습니다.

절차

  1. 다음과 같이 aws-load-balancer-controller 리소스 YAML 파일을 생성합니다(예: sample-aws-lb.yaml ).

    apiVersion: networking.olm.openshift.io/v1alpha1
    kind: AWSLoadBalancerController 1
    metadata:
      name: cluster 2
    spec:
      subnetTagging: Auto 3
      additionalResourceTags: 4
        example.org/cost-center: 5113232
        example.org/security-scope: staging
      ingressClass: cloud 5
      config:
        replicas: 2 6
      enabledAddons: 7
        - AWSWAFv2 8
    1
    aws-load-balancer-controller 리소스를 정의합니다.
    2
    AWS Load Balancer Controller 인스턴스 이름을 정의합니다. 이 인스턴스 이름은 모든 관련 리소스에 접미사로 추가됩니다.
    3
    유효한 옵션은 AutoManual 입니다. 값을 Auto 로 설정하면 Operator에서 클러스터에 속하는 서브넷을 확인하고 적절하게 태그를 지정하려고 합니다. 내부 서브넷 태그가 내부 서브넷에 없는 경우 Operator에서 역할을 올바르게 결정할 수 없습니다. 사용자 제공 인프라에 클러스터를 설치하는 경우 적절한 역할 태그로 서브넷에 수동으로 태그를 지정하고 서브넷 태그 지정 정책을 Manual 로 설정할 수 있습니다.
    4
    AWS 리소스를 프로비저닝할 때 컨트롤러가 사용하는 태그를 정의합니다.
    5
    이 필드의 기본값은 alb 입니다. Operator는 이름이 없는 경우 IngressClass 리소스를 동일한 이름으로 프로비저닝합니다.
    6
    컨트롤러의 복제본 수를 지정합니다.
    7
    주석을 통해 지정된 AWS 로드 밸런서의 애드온을 지정합니다.
    8
    alb.ingress.kubernetes.io/wafv2-acl-arn 주석을 활성화합니다.
  2. 다음 명령을 실행하여 aws-load-balancer-controller 리소스를 생성합니다.

    $ oc create -f sample-aws-lb.yaml
  3. AWS 로드 밸런서 컨트롤러가 실행된 후 배포 리소스를 생성합니다.

    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
    1
    배포 리소스를 정의합니다.
    2
    배포 이름을 지정합니다.
    3
    배포 복제본 수를 지정합니다.
  4. 서비스 리소스를 생성합니다.

    apiVersion: v1
    kind: Service 1
    metadata:
      name: <echoserver> 2
      namespace: echoserver
    spec:
      ports:
        - port: 80
          targetPort: 8080
          protocol: TCP
      type: NodePort
      selector:
        app: echoserver
    1
    서비스 리소스를 정의합니다.
    2
    서비스 이름을 지정합니다.
  5. ALB 지원 Ingress 리소스를 배포합니다.

    apiVersion: networking.k8s.io/v1
    kind: Ingress 1
    metadata:
      name: <echoserver> 2
      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> 3
                    port:
                      number: 80
    1
    Ingress 리소스를 정의합니다.
    2
    Ingress 리소스의 이름을 지정합니다.
    3
    서비스 리소스의 이름을 지정합니다.

검증

  • 다음 명령을 실행하여 프로비저닝된 AWS Load Balancer(ALB) 호스트를 표시하는 Ingress 리소스의 상태를 확인합니다.

    $ HOST=$(oc get ingress -n echoserver echoserver --template='{{(index .status.loadBalancer.ingress 0).hostname}}')
  • 다음 명령을 실행하여 프로비저닝된 AWS Load Balancer(ALB) 호스트의 상태를 확인합니다.

    $ curl $HOST