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
)에 액세스할 수 있습니다.
절차
다음과 같이
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
- 유효한 옵션은
Auto
및Manual
입니다. 값을Auto
로 설정하면 Operator에서 클러스터에 속하는 서브넷을 확인하고 적절하게 태그를 지정하려고 합니다. 내부 서브넷 태그가 내부 서브넷에 없는 경우 Operator에서 역할을 올바르게 결정할 수 없습니다. 사용자 제공 인프라에 클러스터를 설치하는 경우 적절한 역할 태그로 서브넷에 수동으로 태그를 지정하고 서브넷 태그 지정 정책을Manual
로 설정할 수 있습니다. - 4
- AWS 리소스를 프로비저닝할 때 컨트롤러가 사용하는 태그를 정의합니다.
- 5
- 이 필드의 기본값은
alb
입니다. Operator는 이름이 없는 경우IngressClass
리소스를 동일한 이름으로 프로비저닝합니다. - 6
- 컨트롤러의 복제본 수를 지정합니다.
- 7
- 주석을 통해 지정된 AWS 로드 밸런서의 애드온을 지정합니다.
- 8
alb.ingress.kubernetes.io/wafv2-acl-arn
주석을 활성화합니다.
다음 명령을 실행하여
aws-load-balancer-controller
리소스를 생성합니다.$ oc create -f sample-aws-lb.yaml
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
서비스
리소스를 생성합니다.apiVersion: v1 kind: Service 1 metadata: name: <echoserver> 2 namespace: echoserver spec: ports: - port: 80 targetPort: 8080 protocol: TCP type: NodePort selector: app: echoserver
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
검증
다음 명령을 실행하여 프로비저닝된 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