22.5. 创建 AWS Load Balancer Controller 实例

安装 AWS Load Balancer Operator 后,您可以创建 AWS Load Balancer Controller。

22.5.1. 创建 AWS Load Balancer Controller

您只能在集群中安装 AWSLoadBalancerController 对象的单个实例。您可以使用 CLI 创建 AWS Load Balancer Controller。AWS Load Balancer Operator 只协调名为 resource 的集群

先决条件

  • 您已创建了 echoserver 命名空间。
  • 您可以访问 OpenShift CLI(oc)。

流程

  1. 创建定义 AWSLoadBalancerController 对象的 YAML 文件:

    sample-aws-lb.yaml 文件示例

    apiVersion: networking.olm.openshift.io/v1
    kind: AWSLoadBalancerController 1
    metadata:
      name: cluster 2
    spec:
      subnetTagging: Auto 3
      additionalResourceTags: 4
      - key: example.org/security-scope
        value: staging
      ingressClass: alb 5
      config:
        replicas: 2 6
      enabledAddons: 7
        - AWSWAFv2 8

    1
    定义 AWSLoadBalancerController 对象。
    2
    定义 AWS Load Balancer Controller 名称。此实例名称作为后缀添加到所有相关资源。
    3
    配置 AWS Load Balancer Controller 的子网标记方法。以下值有效:
    • Auto :AWS Load Balancer Operator 决定属于集群的子网,并相应地标记它们。如果内部子网上不存在内部子网标签,Operator 无法正确确定角色。
    • Manual :您可以使用适当的角色标签手动标记属于集群的子网。如果在用户提供的基础架构上安装集群,则使用这个选项。
    4
    定义在置备 AWS 资源时 AWS Load Balancer Controller 使用的标签。
    5
    定义入口类名称。默认值为 alb
    6
    指定 AWS Load Balancer Controller 的副本数。
    7
    将注解指定为 AWS Load Balancer Controller 的附加组件。
    8
    启用 alb.ingress.kubernetes.io/wafv2-acl-arn 注解。
  2. 运行以下命令来创建 AWSLoadBalancerController 对象:

    $ oc create -f sample-aws-lb.yaml
  3. 创建定义 Deployment 资源的 YAML 文件:

    sample-aws-lb.yaml 文件示例

    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. 创建定义 Service 资源的 YAML 文件:

    service-albo.yaml 文件示例:

    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. 创建定义 Ingress 资源的 YAML 文件:

    ingress-albo.yaml 文件示例:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: <name> 1
      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> 2
                    port:
                      number: 80

    1
    Ingress 资源指定一个名称。
    2
    指定服务名称。

验证

  • 运行以下命令,将 Ingress 资源的状态保存到 HOST 变量中:

    $ HOST=$(oc get ingress -n echoserver echoserver --template='{{(index .status.loadBalancer.ingress 0).hostname}}')
  • 运行以下命令,验证 Ingress 资源的状态:

    $ curl $HOST