19.3. 创建 AWS Load Balancer Controller 实例
安装 Operator 后,您可以创建 AWS Load Balancer Controller 实例。
19.3.1. 使用 AWS Load Balancer Operator 创建 AWS Load Balancer Controller 实例
您只能在集群中安装 aws-load-balancer-controller
的单个实例。您可以使用 CLI 创建 AWS Load Balancer Controller。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: alb 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 不存在,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 Load Balancer Controller 运行后,创建一个
部署
资源 :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 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
验证
运行以下命令,验证
Ingress
资源的状态,以显示置备的 AWS Load Balancer(ALB)的主机:$ HOST=$(kubectl get ingress -n echoserver echoserver -o json | jq -r '.status.loadBalancer.ingress[0].hostname')
运行以下命令,验证置备的 AWS Load Balancer(ALB)主机的状态:
$ curl $HOST