文档

ALB Ingress快速入门

更新时间:

ALB Ingress基于阿里云应用型负载均衡ALB(Application Load Balancer)之上提供更为强大的Ingress流量管理方式,兼容Nginx Ingress,具备处理复杂业务路由和证书自动发现的能力,支持HTTP、HTTPS和QUIC协议,满足在云原生应用场景下对超强弹性和大规模七层流量处理能力的需求。当您希望在ACK集群中配置ALB Ingress实现Ingress流量管理,您可以参考本文部署服务并通过ALB Ingress访问服务。

背景信息

ALB Ingress涉及到的概念介绍如下:

  • ALB Ingress Controller:Ingress Controller是Kubernetes中负责管理Ingress资源的组件。它充当集群内的入口点,将外部流量路由到适当的服务。ALB Ingress Controller通过API Server获取Ingress资源和AlbConfig资源的变化,然后依次创建ALB实例、监听、路由转发规则以及后端服务器组。

  • AlbConfig CRD:CRD (Custom Resource Definition) 是 Kubernetes 的一种机制,用于扩展 Kubernetes API,并允许用户自定义资源类型。一个AlbConfig对应一个ALB实例。

  • Ingress Class:Ingress Class是Kubernetes Ingress资源的一个属性,用于定义Ingress Controller的类别或标识。它允许在集群中同时使用多个Ingress Controller,并为每个Ingress资源指定使用的特定Controller。

  • Ingress:Ingress是Kubernetes中用于定义外部流量路由规则和访问规则的资源对象,通过Ingress Controller来实现流量转发功能。ALB Ingress可以通过注解项配置转发规则,配置完成后,HTTP/HTTPS请求可以通过注解项配置的转发规则转发到对应的Service上。

  • Service:在Kubernetes中,Service是一种抽象的资源对象,用于定义一组具有相同逻辑功能的Pod实例,并为它们提供稳定的虚拟IP地址和端口。

    Service为应用程序提供了一个稳定的入口,允许其他应用程序或服务通过访问Service的虚拟IP和端口来与后端Pod进行通信,而无需了解具体的Pod IP地址和端口。Service是后端真实服务的抽象,一个Service可以代表多个相同的后端服务。

您可参照下图,理解ALB网络实例与ALB Ingress之间的逻辑关系。

image

使用限制

  • 如果您使用的是Flannel网络插件,则ALB Ingress后端Service服务仅支持NodePort和LoadBalancer类型。

  • AlbConfig、Namespace、Ingress和Service这些资源的名称不能以aliyun开头。

  • 低版本Nginx Ingress Controller无法识别Ingress资源中的spec:ingressClassName字段。如果集群中同时存在Nginx Ingress和ALB Ingress,会存在ALB Ingress被低版本Nginx Ingress Controller调谐的风险。因此,请及时升级Nginx Ingress Controller版本,或通过Annotation注解项指定ALB Ingress对应的ingressClass。具体操作,请参见升级Nginx Ingress Controller组件ALB Ingress服务高级用法

场景示例

本教程以四个部署了Nginx的Pod为例,演示如何通过配置ALB Ingress,实现相同域名不同URL路径的流量转发。

前端请求

流量转发至

demo.domain.ingress.top/coffee

coffee服务

demo.domain.ingress.top/tea

tea服务

前提条件

步骤一:安装ALB Ingress Controller组件

使用ALB Ingress前,请安装ALB Ingress Controller组件。

创建集群时安装

创建ACK托管集群ACK专有集群时,在Ingress参数配置区域,选择安装ALB Ingress

您可以为ALB云原生网关实例来源选择新建使用已有暂不创建选项。这三种选项的对比如下:

重要

如果选择新建使用已有,则会在安装ALB Ingress Controller组件后自动创建AlbConfig以及与之匹配的IngressClass资源,在AlbConfig中会自动配置端口为80,协议为HTTP的listener

对比项

新建

使用已有

暂不创建

适用场景

在集群中第一次使用ALB Ingress,集群中不存在AlbConfig的场景。

希望使用已有ALB实例的场景。

希望在安装组件后配置AlbConfig的场景。

工作原理

新建AlbConfig后,会使用其中的配置自动创建一个ALB实例。

会自动创建一个AlbConfig,其中的id字段会填入被选择的ALB实例的ID。

只安装ALB Ingress Controller,而不创建AlbConfig。

后续操作

网络类型中选择ALB实例的网络类型,然后在虚拟交换机中选择ALB实例关联的虚拟交换机。

重要

为保障业务高可用,推荐您选择2个或以上不同可用区的交换机。

ALB云原生网关实例中选择希望使用的ALB实例。如果您需要使用AlbConfig关联该ALB实例,请参见复用已有ALB实例

重要

不支持使用基础版ALB实例。

使用已有AlbConfig,或后续完成AlbConfig的配置。

在已有集群中安装

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

  3. 组件管理页面,单击网络页签,在网络组件区域,在ALB Ingress Controller组件卡片的右下角单击安装

  4. 安装组件 ALB Ingress Controller对话框,为选择ALB 云原生网关实例来源选择新建使用已有暂不创建选项。这三种选项的对比如下:

    重要

    如果选择新建使用已有,则会在安装ALB Ingress Controller组件后自动创建AlbConfig以及与之匹配的IngressClass资源,在AlbConfig中会自动配置端口为80,协议为HTTP的listener

    对比项

    新建

    使用已有

    暂不创建

    适用场景

    在集群中第一次使用ALB Ingress,集群中不存在AlbConfig的场景。

    希望使用已有ALB实例的场景。

    希望在安装组件后配置AlbConfig的场景。

    工作原理

    新建AlbConfig后,会使用其中的配置自动创建一个ALB实例。

    会自动创建一个AlbConfig,其中的id字段会填入被选择的ALB实例的ID。

    只安装ALB Ingress Controller,而不创建AlbConfig。

    后续操作

    网络类型中选择ALB实例的网络类型,然后在虚拟交换机中选择ALB实例关联的虚拟交换机。

    重要

    为保障业务高可用,推荐您选择2个或以上不同可用区的交换机。

    ALB云原生网关实例中选择希望使用的ALB实例。如果您需要使用AlbConfig关联该ALB实例,请参见复用已有ALB实例

    重要

    不支持使用基础版ALB实例。

    使用已有AlbConfig,或后续完成AlbConfig的配置。

  5. 单击确定

说明

若需要在ACK专有集群中通过ALB Ingress访问服务,在部署服务前需要为ALB Ingress Controller授权。具体操作,请参见为ACK专有集群授予ALB Ingress Controller访问权限

步骤二:部署后端服务

控制台

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

  3. 单击右上角使用YAML创建资源

    1. 示例模板:选择自定义

    2. 模板:输入YAML配置文件代码。该配置文件用于部署两个名称分别为coffeetea的Deployment,以及两个名称分别为coffee-svctea-svc的Service。

      YAML配置文件参考

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: coffee
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: coffee
        template:
          metadata:
            labels:
              app: coffee
          spec:
            containers:
            - name: coffee
              image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
              ports:
              - containerPort: 80
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: coffee-svc
      spec:
        ports:
        - port: 80
          targetPort: 80
          protocol: TCP
        selector:
          app: coffee
        type: NodePort
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: tea
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: tea
        template:
          metadata:
            labels:
              app: tea
          spec:
            containers:
            - name: tea
              image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
              ports:
              - containerPort: 80
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: tea-svc
      spec:
        ports:
        - port: 80
          targetPort: 80
          protocol: TCP
        selector:
          app: tea
        type: NodePort
  4. 配置完成后单击创建,页面将提示创建成功

  5. 检查Deployment和Service创建成功:

    1. 在左侧导航栏,选择工作负载 > 无状态。可查看到名称为coffee和tea的Deployment已部署。

    2. 在左侧导航栏,选择网络 > 服务。可查看到名称为coffee-svc和tea-svc的Service已部署。

kubectl

  1. 创建并拷贝以下内容到cafe-service.yaml文件中,用于部署两个名称分别为coffeetea的Deployment,以及两个名称分别为coffee-svctea-svc的Service。

    YAML配置文件参考

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: NodePort
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tea
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: tea
      template:
        metadata:
          labels:
            app: tea
        spec:
          containers:
          - name: tea
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tea-svc
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: tea
      type: NodePort
  2. 执行以下命令,部署两个Deployment和两个Service。

    kubectl apply -f cafe-service.yaml

    预期输出:

    deployment "coffee" created
    service "coffee-svc" created
    deployment "tea" created
    service "tea-svc" created
  3. 执行以下命令,查看应用和服务的状态。

    1. 执行以下命令,查看应用的状态。

      kubectl get deployment

      预期输出:

      NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
      coffee                           1/2     2            1           2m26s
      tea                              1/1     1            1           2m26s
    2. 执行以下命令,查看服务的状态。

      kubectl get svc

      预期输出:

      NAME                          TYPE           CLUSTER-IP       EXTERNAL-IP           PORT(S)                 AGE
      coffee-svc                    NodePort       172.16.XX.XX     <none>                80:32056/TCP            9m38s
      tea-svc                       NodePort       172.16.XX.XX     <none>                80:31696/TCP            9m38s

步骤三:创建AlbConfig

说明

如果在步骤一:安装ALB Ingress Controller组件中,您为ALB云原生网关实例来源选择了新建使用已有选项,controller会自动创建一个名为“alb”的AlbConfig和名为“alb”的IngressClass资源,您可忽略此步骤。

控制台

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 自定义资源

  3. 单击右上角使用YAML创建资源

    1. 示例模板:选择自定义

    2. 模板:输入YAML配置文件代码。

      YAML配置文件参考

      apiVersion: alibabacloud.com/v1
      kind: AlbConfig
      metadata:
        name: alb
      spec:
        config:
          name: alb-test
          addressType: Internet
          zoneMappings:
          - vSwitchId: vsw-uf6ccg2a9g71hx8go****
          - vSwitchId: vsw-uf6nun9tql5t8nh15****
        listeners:
          - port: 80
            protocol: HTTP

      可调整参数说明如下:

      参数

      是否必填

      说明

      metadata.name

      AlbConfig的名称。

      说明

      AlbConfig的名称在集群中必须是唯一的。因此,在创建AlbConfig时,您需要确保AlbConfig名称的唯一性,以避免命名冲突。

      spec.config.name

      ALB实例的名称。

      spec.config.addressType

      ALB实例的网络类型。取值如下:

      • Internet(默认值):公网类型。面向公网提供应用型负载均衡服务,公网可访问。

        说明

        应用型负载均衡通过绑定弹性公网IP进行公网服务,使用公网类型ALB实例将收取弹性公网IP的实例费与带宽、流量费用,详情参见按量付费

      • Intranet:私网类型。面向VPC内部提供应用型负载均衡服务,公网不可访问。

      spec.config.zoneMappings

      设置ALB交换机ID。创建交换机具体操作请参见创建和管理交换机

      说明
      • 指定的交换机必须在ALB当前所支持的可用区内,且与集群处于同一VPC。关于ALB支持的地域与可用区,请参见ALB支持的地域与可用区

      • 应用型负载均衡支持多可用区部署,若当前地域支持2个及以上可用区,为保障业务高可用,请至少选择2个或以上不同可用区的交换机。

      spec.listeners

      配置ALB的监听端口和协议。本文配置示例为端口80的HTTP监听。

      监听定义了流量进入负载均衡的方式和规则,此处建议保留该配置,否则您需要另行创建监听才可使用ALB Ingress。

  4. 配置完成后单击创建,页面将提示创建成功

  5. 检查ALB实例创建成功:

    1. 登录应用型负载均衡ALB控制台

    2. 在顶部菜单栏,选择实例所属的地域。

    3. 实例页面,在实例列表可查看到名称为alb-test的ALB实例,表示实例创建成功。

kubectl

  1. 拷贝以下内容到alb-test.yaml文件中,用于创建AlbConfig。

    YAML配置文件参考

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb
    spec:
      config:
        name: alb-test
        addressType: Internet
        zoneMappings:
        - vSwitchId: vsw-uf6ccg2a9g71hx8go****
        - vSwitchId: vsw-uf6nun9tql5t8nh15****
      listeners:
        - port: 80
          protocol: HTTP

    可调整参数说明如下:

    参数

    是否必填

    说明

    metadata.name

    AlbConfig的名称。

    说明

    AlbConfig的名称在集群中必须是唯一的。因此,在创建AlbConfig时,您需要确保AlbConfig名称的唯一性,以避免命名冲突。

    spec.config.name

    ALB实例的名称。

    spec.config.addressType

    ALB实例的网络类型。取值如下:

    • Internet(默认值):公网类型。面向公网提供应用型负载均衡服务,公网可访问。

      说明

      应用型负载均衡通过绑定弹性公网IP进行公网服务,使用公网类型ALB实例将收取弹性公网IP的实例费与带宽、流量费用,详情参见按量付费

    • Intranet:私网类型。面向VPC内部提供应用型负载均衡服务,公网不可访问。

    spec.config.zoneMappings

    设置ALB交换机ID。创建交换机具体操作请参见创建和管理交换机

    说明
    • 指定的交换机必须在ALB当前所支持的可用区内,且与集群处于同一VPC。关于ALB支持的地域与可用区,请参见ALB支持的地域与可用区

    • 应用型负载均衡支持多可用区部署,若当前地域支持2个及以上可用区,为保障业务高可用,请至少选择2个或以上不同可用区的交换机。

    spec.listeners

    配置ALB的监听端口和协议。本文配置示例为端口80的HTTP监听。

    监听定义了流量进入负载均衡的方式和规则,此处建议保留该配置,否则您需要另行创建监听才可使用ALB Ingress。

  2. 执行以下命令,创建AlbConfig。

    kubectl apply -f alb-test.yaml

    预期输出:

    albconfig.alibabacloud.com/alb-demo created

步骤四:创建IngressClass

IngressClass建议与AlbConfig一一对应。

说明

如果在步骤一:安装ALB Ingress Controller组件中,您为ALB云原生网关实例来源选择了新建使用已有选项,controller会自动创建一个名为“alb”的AlbConfig和名为“alb”的IngressClass资源,您可忽略此步骤。

控制台

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 自定义资源

  3. 单击右上角使用YAML创建资源

    1. 示例模板:选择自定义

    2. 模板:输入YAML配置文件代码。

      YAML配置文件参考

      apiVersion: networking.k8s.io/v1
      kind: IngressClass
      metadata:
        name: alb
      spec:
        controller: ingress.k8s.alibabacloud/alb
        parameters:
          apiGroup: alibabacloud.com
          kind: AlbConfig
          name: alb

      可调整参数说明如下:

      参数

      是否必填

      说明

      metadata.name

      IngressClass的名称。

      说明

      IngressClass的名称在集群中必须是唯一的。因此,在创建IngressClass时,您需要确保IngressClass名称的唯一性,以避免命名冲突。

      spec.parameters.name

      关联的AlbConfig的名称。

  4. 配置完成后单击创建,页面将提示创建成功

  5. 检查IngressClass创建成功:

    1. 在左侧导航栏,选择工作负载 > 自定义资源

    2. 选择资源对象浏览器页签。

    3. API组搜索栏中,输入IngressClass进行搜索,可查看到对应的IngressClass已创建。

kubectl

  1. 创建并拷贝以下内容到alb.yaml文件中,用于创建IngressClass。

    YAML配置文件参考

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb

    可调整参数说明如下:

    参数

    是否必填

    说明

    metadata.name

    IngressClass的名称。

    说明

    IngressClass的名称在集群中必须是唯一的。因此,在创建IngressClass时,您需要确保IngressClass名称的唯一性,以避免命名冲突。

    spec.parameters.name

    关联的AlbConfig的名称。

  2. 执行以下命令,创建IngressClass。

      kubectl apply -f alb.yaml

    预期输出:

    ingressclass.networking.k8s.io/alb created

步骤五:创建Ingress

控制台

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择网络 > 路由

  3. 路由页面,单击创建 Ingress,在创建 Ingress对话框配置路由。

    配置项

    说明

    示例值

    网关类型

    可按需选择ALB应用型负载均衡MSE云原生网关Nginx三种网关类型。

    关于三种网关的差异,请参见Nginx Ingress、ALB Ingress和MSE Ingress对比

    ALB应用负载型均衡

    名称

    自定义路由名称。

    cafe-ingress

    Ingress Class

    自定义Ingress的类。

    alb

    监听/端口

    在AlbConfig中定义ALB的监听端口和协议,规定了流量进入负载均衡方式和处理规则。

    HTTP:80

    规则

    单击+ 添加规则可新增多个路由规则。

    • 域名:自定义域名。

    • 路径映射:配置如下配置项。

      • 路径:指定服务访问的URL路径。本例中不做配置,保留根路径/

      • 匹配规则:支持前缀匹配(Prefix)完整匹配(Exact)默认(ImplementationSpecific)

      • 服务名称:选择目标服务,即K8s内的Service。

      • 端口:选择服务需要暴露的端口。

    • Ingress支持同一个域名下配置多条路径。单击+ 添加路径新增路径。

    • 域名:demo.domain.ingress.top

    • 路径映射

      • 路径:/tea

      • 匹配规则:默认(ImplementationSpecific)

      • 服务名称:tea-svc

      • 端口:80

    • 路径映射

      • 路径:/coffee

      • 匹配规则:默认(ImplementationSpecific)

      • 服务名称:coffee-svc

      • 端口:80

    TLS配置

    开启TLS配置开关,配置安全的路由服务。

    • 域名:自定义域名。

    • 保密字典:根据需要选择对应的保密字典。

      如果您需要创建Secret,请执行如下操作。

      1. 保密字典右侧,单击创建

      2. 创建 Secret对话框,自定义保密字典的名称CertKey,然后单击确定

      3. 保密字典的下拉框,选择已创建的Secret。

    单击+ 新增TLS配置,可配置多条TLS。

    更多详情,请参见配置HTTPS证书以实现加密通信

    关闭TLS配置,此示例中不需要配置TLS。

    更多配置

    • 灰度发布:开启灰度发布开关。灰度规则可按照请求头、Cookie 、权重三个维度进行设置。

      说明

      请求头、Cookie 、权重可以只设置一种,若同时设置生效规则按请求头、Cookie、权重顺序匹配。

      • 按请求头:基于Request Header的流量切分,设置后会添加注解nginx.ingress.kubernetes.io/canary-by-headernginx.ingress.kubernetes.io/canary-by-header-valuenginx.ingress.kubernetes.io/canary-by-header-pattern

      • 按Cookie:基于Cookie的流量切分,设置后会添加注解nginx.ingress.kubernetes.io/canary-by-cookie

      • 按权重:设置请求到指定服务的百分比(值为0~100的整数),设置后会添加注解nginx.ingress.kubernetes.io/canary-weight

    • 协议:指定后端服务的协议,设置后会添加注解nginx.ingress.kubernetes.io/backend-protocol

      支持HTTP、HTTPS、gRPC、gRPCS四种服务协议。

    • 重写路径:将客户端请求中的路径重写后发送到后端服务,设置后会添加注解 nginx.ingress.kubernetes.io/rewrite-target

    关闭灰度发布,协议和重写路径保持默认。此示例中不需要配置灰度发布、协议、重新路径。

    自定义转发规则

    开启自定义转发规则,可精细化管理入站流量。

    说明

    转发规则的条件条目上限为10个。

    • 转发条件下拉框中选择:

      • 域名

        匹配请求域名,如果设置了多个域名,则域名之间是或的关系。设置后会添加注释alb.ingress.kubernetes.io/conditions.host-example

      • 路径

        匹配请求路径,如果设置了多个路径,则路径之间是或的关系。设置后会添加注释alb.ingress.kubernetes.io/conditions.path-example

      • HTTP标头

        以键值对形式匹配请求的头部信息。例如,键是headername值是headervalue1。如果设置了多个Header值,则Header之间是或的关系。设置后会添加注释alb.ingress.kubernetes.io/conditions.http-header-example

    • 转发动作下拉框中选择:

      • 转发至

        转发到后端多服务器组。在服务名称中,请选择目标服务。在端口中,选择目标端口号。然后自定义配置权重值。

        说明
        • 如果是Flannel网络插件集群则不支持ClusterIP类型服务。

        • 选择转发至,就不需要配置规则中的路径映射

      • 返回固定响应

        设置通过ALB给客户端返回固定响应内容,可以设置响应状态码,正文内容和正文类型。按需求配置响应状态码响应正文类型(可选)、响应正文(可选)

        响应正文类型

        • text/plain:表示无格式的内容类型。

        • text/css:表示XML格式的内容。

        • text/html:表示HTML格式的内容。

        • application/javascript:表示JavaScript格式的内容。

        • application/json:表示JSON格式内容类型。

    自定义转发规则支持多种转发条件及转发动作,您可以配置域名、路径、HTTP标头转发条件,转发至、返回固定响应的转发动作。了解更多配置,请参见自定义ALB Ingress的转发规则

    关闭自定义转发规则。此示例中不需要配置自定义转发规则。

    注解

    您可自定义注解名称和值,也可根据名称选择或搜索要配置的注解。Ingress的注解请参见Annotations

    单击+添加注解,可对Ingress无上限地添加注解。

    无需配置,此示例不需要配置注解。

    标签

    标签的作用是为Ingress添加对应的标签,标示该Ingress的特点。

    单击+添加标签,可对Ingress无上限地添加标签。

    无需配置,此示例不需要配置标签。

  4. 配置完成,在创建Ingress页面的左下角,单击确定。

  5. 检查Ingress创建成功:

    1. 在左侧导航栏,选择网络 > 路由。可查看到名称为cafe-ingress的Ingress已部署。

    2. 在cafe-ingress的端点列,可查看到端点信息。

kubectl

  1. 创建并拷贝以下内容到cafe-ingress.yaml文件中,用于创建Ingress。

    YAML配置文件参考

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cafe-ingress 
    spec:
      ingressClassName: alb
      rules:
       - host: demo.domain.ingress.top
         http:
          paths:
          # 配置Context Path
          - path: /tea
            pathType: ImplementationSpecific
            backend:
              service:
                name: tea-svc
                port:
                  number: 80
          # 配置Context Path
          - path: /coffee
            pathType: ImplementationSpecific
            backend:
              service:
                name: coffee-svc
                port: 
                  number: 80

    可调整参数说明如下:

    参数

    是否必填

    说明

    metadata.name

    Ingress的名称。

    说明

    Ingress的名称在集群中必须是唯一的。因此,在创建Ingress时,您需要确保Ingress名称的唯一性,以避免命名冲突。

    spec.ingressClassName

    关联的IngressClass的名称。

    spec.rules.host

    HTTP头部host字段域名信息,需要配置为您的自有域名。

    当您在浏览器中访问您的自有域名时,例如“http://demo.domain.ingress.top”,浏览器会在发送HTTP请求时自动添加一个“Host: demo.domain.ingress.top”的头部字段。这样,服务器就可以根据该头部字段来识别请求的目标主机名。在Kubernetes中,Ingress规则中的host字段会与来自请求的Host头部字段进行匹配。当匹配成功时,Ingress规则就会将请求路由到相应的后端服务进行处理。

    说明
    • 此处如果配置了自有域名,需要确保该自有域名完成备案,否则可能访问时无法解析。具体操作,请参见ICP备案流程概述

    • 此处如果未配置,那么该Ingress规则将匹配所有到达Ingress Controller的请求。

    spec.rules.http.paths.path

    转发路径URL。

    spec.rules.http.paths.pathType

    URL匹配规则。详情可参考基于URL路径转发请求

    spec.rules.http.paths.backend.service.name

    填写您此前创建的Service名称。

    spec.rules.http.paths.backend.service.port.number

    填写您此前创建的Service的服务端口号。

    这个端口号的设置非常重要,因为它决定了在路由到后端服务时使用的端口。确保端口号正确设置,以确保请求可以正确路由到后端服务并被处理。

  2. 执行以下命令,配置coffeetea服务对外暴露的域名和path路径。

    kubectl apply -f cafe-ingress.yaml

    预期输出:

    ingress.networking.k8s.io/cafe-ingress created
  3. (可选)执行以下命令获取ALB实例DNS地址。

    kubectl get ingress

    预期输出:

    NAME           CLASS    HOSTS                         ADDRESS                                               PORTS   AGE
    cafe-ingress   alb      demo.domain.ingress.top       alb-m551oo2zn63yov****.cn-hangzhou.alb.aliyuncs.com   80      50s

(可选)步骤六:配置域名解析

如果您在创建Ingress时配置了spec.rules.host字段为您的自有域名,您需要将您的域名添加CNAME记录解析到ALB DNS名称。后续通过你的自有域名访问服务。

  1. 登录容器服务ACK控制台

  2. 单击集群名称,进入集群管理页面。

  3. 在左侧导航栏,选择网络 > 路由

  4. 在cafe-ingress的端点列,复制其对应的DNS名称。

  5. 完成以下步骤来添加CNAME解析记录。

    1. 登录域名解析控制台

    2. 域名解析页面单击添加域名

    3. 添加域名对话框中输入您的主机域名,然后单击确认

      重要

      您的主机域名需已完成TXT记录验证。

    4. 在目标域名的操作列单击解析设置

    5. 解析设置页面单击添加记录

    6. 添加记录面板配置以下信息完成CNAME解析配置,然后单击确认

      配置

      说明

      记录类型

      在下拉列表中选择CNAME

      主机记录

      您的域名的前缀,例如www

      解析请求来源

      选择默认。

      记录值

      输入域名对应的CNAME地址,即您复制的DNS名称。

      TTL

      全称Time To Live,表示DNS记录在DNS服务器上的缓存时间,本文使用默认值。

步骤七:测试流量转发

在浏览器中输入“测试域名+URL路径”,测试流量转发是否正确。

说明
  • 如果您配置了自有域名,则“测试域名”为您的自有域名。

  • 如果您未配置自有域名,则“测试域名”为cafe-ingress的端点DNS名称。

测试域名以demo.domain.ingress.top为例:

  1. 在浏览器中输入demo.domain.ingress.top/coffee,将返回coffee-svc对应的后端服务界面。 image

  2. 在浏览器中输入demo.domain.ingress.top/tea,将返回tea-svc对应的后端服务界面。image

相关文档

  • 本页导读 (1)