全部產品
Search
文件中心

Container Service for Kubernetes:通過ALB Ingress訪問服務

更新時間:Jun 19, 2024

ALB Ingress支援HTTP、HTTPS和QUIC協議,滿足雲原生應用在需要高度彈性和大規模七層流量管理時的各種需求,與Nginx Ingress相容。同時,支援複雜的業務路由配置和TLS認證的自動管理,提供靈活的流量管理機制。您可以通過配置轉寄規則,實現不同URL訪問叢集內不同的Service。

前提條件

注意事項

  • 如果您使用的是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服務進階用法

步驟一:建立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支援的地區與可用性區域,請參見ALB支援的地區與可用性區域

  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

相關文檔