在注册集群中通过ALB Ingress访问服务

ALB Ingress支持HTTP、HTTPS和QUIC协议,满足云原生应用在需要高度弹性和大规模七层流量管理时的各种需求,与Nginx Ingress兼容。同时,支持复杂的业务路由配置和TLS证书的自动管理,提供灵活的流量管理机制。您可以通过配置转发规则,实现不同URL访问集群内不同的Service。

前提条件

步骤一:创建AlbConfig

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

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

    参数

    说明

    spec.config.name

    (可选)表示Alb实例的名称。

    spec.config.addressType

    (必选)表示负载均衡的地址类型。取值如下:

    • Internet(默认值):负载均衡具有公网IP地址,DNS域名被解析到公网IP,因此可以在公网环境访问。

    • Intranet:负载均衡只有私网IP地址,DNS域名被解析到私网IP,因此只能被负载均衡所在VPC的内网环境访问。

    spec.config.zoneMappings

    (必选)用于设置ALB Ingress交换机ID,您需要至少指定两个不同可用区交换机ID,指定的交换机必须在ALB当前所支持的可用区内,且与集群处于同一VPC。关于ALB Ingress支持的地域与可用区,请参见支持的地域与可用区

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

    kubectl apply -f alb-test.yaml

    预期输出:

    albconfig.alibabacloud.com/alb-demo created
  3. 创建并拷贝以下内容到alb.yaml文件中,用于创建IngressClass。

    1.19及之后版本集群

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

    1.19版本之前集群

    apiVersion: networking.k8s.io/v1beta1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-demo
  4. 执行以下命令,创建IngressClass。

      kubectl apply -f alb.yaml

    预期输出:

    ingressclass.networking.k8s.io/alb created

步骤二:部署服务

  1. 创建并拷贝以下内容到cafe-service.yaml文件中,用于部署两个名称分别为coffeetea的Deployment,以及两个名称分别为coffeetea的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
      clusterIP: None
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tea
    spec:
      replicas: 1
      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
      labels:
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: tea
      clusterIP: None
  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 deploy

      预期输出:

      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

步骤三:配置ALB Ingress

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

    1.19及之后版本集群

    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

    1.19版本之前集群

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: cafe-ingress
    spec:
      ingressClassName: alb
      rules:
       - host: demo.domain.ingress.top
         http:
          paths:
          # 配置Context Path。
          - path: /tea
            backend:
              serviceName: tea-svc
              servicePort: 80
          # 配置Context Path。
          - path: /coffee
            backend:
              serviceName: coffee-svc
              servicePort: 80
  2. 执行以下命令,配置coffeetea服务对外暴露的域名和path路径。

    kubectl apply -f cafe-ingress.yaml

    预期输出:

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

    kubectl get ing

    预期输出:

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

步骤四:访问服务

  • 利用获取的ALB实例地址,通过命令行方式访问coffee服务。

    curl -H Host:demo.domain.ingress.top http://alb-lhwdm5c9h8lrcm****.cn-hangzhou.alb.aliyuncs.com/coffee
  • 利用获取的ALB实例地址,通过命令行方式访问tea服务。

    curl -H Host:demo.domain.ingress.top http://alb-lhwdm5c9h8lrcm****.cn-hangzhou.alb.aliyuncs.com/tea

相关文档

  • 如需了解ALB Ingress服务的高级用法,例如如何将来自不同域名或URL路径的请求转发给不同的后端服务器组、配置健康检查、将HTTP访问重定向至HTTPS、灰度发布、配置自定义监听端口等,请参见ALB Ingress服务高级用法

  • AlbConfig是由ALB Ingress Controller提供的CRD资源,ALB Ingress Controller使用AlbConfig来配置ALB实例和监听。详细信息,请参见通过AlbConfig配置ALB实例