21.6. 通过单个 AWS Load Balancer 提供多个入口资源


您可以通过单个 AWS Load Balancer 将流量路由到属于单个域的不同服务。每个 Ingress 资源提供域的不同端点。

21.6.1. 通过单个 AWS Load Balancer 创建多个入口资源

您可以使用 CLI 通过单个 AWS Load Balancer 将流量路由到多个入口资源。

先决条件

  • 您可以访问 OpenShift CLI(oc)。

流程

  1. 创建一个 IngressClassParams 资源 YAML 文件,如 sample-single-lb-params.yaml,如下所示:

    apiVersion: elbv2.k8s.aws/v1beta1 1
    kind: IngressClassParams
    metadata:
      name: single-lb-params 2
    spec:
      group:
        name: single-lb 3
    1
    定义 IngressClassParams 资源的 API 组和版本。
    2
    指定 IngressClassParams 资源名称。
    3
    指定 IngressGroup 资源名称。此类的所有 Ingress 资源都属于此 IngressGroup
  2. 运行以下命令来创建 IngressClassParams 资源:

    $ oc create -f sample-single-lb-params.yaml
  3. 创建 IngressClass 资源 YAML 文件,如 sample-single-lb-class.yaml,如下所示:

    apiVersion: networking.k8s.io/v1 1
    kind: IngressClass
    metadata:
      name: single-lb 2
    spec:
      controller: ingress.k8s.aws/alb 3
      parameters:
        apiGroup: elbv2.k8s.aws 4
        kind: IngressClassParams 5
        name: single-lb-params 6
    1
    定义 IngressClass 资源的 API 组和版本。
    2
    指定入口类名称。
    3
    定义控制器名称。ingress.k8s.aws/alb 值表示此类的所有入口资源都应由 AWS Load Balancer Controller 管理。
    4
    定义 IngressClassParams 资源的 API 组。
    5
    定义 IngressClassParams 资源的资源类型。
    6
    定义 IngressClassParams 资源名称。
  4. 运行以下命令来创建 IngressClass 资源:

    $ oc create -f sample-single-lb-class.yaml
  5. 创建 AWSLoadBalancerController 资源 YAML 文件,如 sample-single-lb.yaml,如下所示:

    apiVersion: networking.olm.openshift.io/v1
    kind: AWSLoadBalancerController
    metadata:
      name: cluster
    spec:
      subnetTagging: Auto
      ingressClass: single-lb 1
    1
    定义 IngressClass 资源的名称。
  6. 运行以下命令来创建 AWSLoadBalancerController 资源:

    $ oc create -f sample-single-lb.yaml
  7. 创建 Ingress 资源 YAML 文件,如 sample-multiple-ingress.yaml,如下所示:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-1 1
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing 2
        alb.ingress.kubernetes.io/group.order: "1" 3
        alb.ingress.kubernetes.io/target-type: instance 4
    spec:
      ingressClassName: single-lb 5
      rules:
      - host: example.com 6
        http:
            paths:
            - path: /blog 7
              pathType: Prefix
              backend:
                service:
                  name: example-1 8
                  port:
                    number: 80 9
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-2
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/group.order: "2"
        alb.ingress.kubernetes.io/target-type: instance
    spec:
      ingressClassName: single-lb
      rules:
      - host: example.com
        http:
            paths:
            - path: /store
              pathType: Prefix
              backend:
                service:
                  name: example-2
                  port:
                    number: 80
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-3
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/group.order: "3"
        alb.ingress.kubernetes.io/target-type: instance
    spec:
      ingressClassName: single-lb
      rules:
      - host: example.com
        http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: example-3
                  port:
                    number: 80
    1
    指定入口名称。
    2
    指明在公共子网中置备的负载均衡器,以访问互联网。
    3
    指定在负载均衡器收到请求时,来自多个入口资源的规则的顺序匹配。
    4
    表示负载均衡器将针对 OpenShift Container Platform 节点为目标,以访问该服务。
    5
    指定属于此入口的入口类。
    6
    定义用于请求路由的域名。
    7
    定义必须路由到服务的路径。
    8
    定义提供 Ingress 资源中配置的端点的服务名称。
    9
    定义服务上提供端点的端口。
  8. 运行以下命令来创建 Ingress 资源:

    $ oc create -f sample-multiple-ingress.yaml
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.