ALB Ingress支持HTTP、HTTPS和QUIC協議,滿足云原生應用在需要高度彈性和大規模七層流量管理時的各種需求,與Nginx Ingress兼容。同時,支持復雜的業務路由配置和TLS證書的自動管理,提供靈活的流量管理機制。您可以通過配置轉發規則,實現不同URL訪問集群內不同的Service。
前提條件
已創建ACK Serverless集群,且Kubernetes版本為1.18及以上版本。具體操作,請參見容器服務 Serverless 版使用快速入門。
已創建兩個不同可用區的交換機,并且與集群處于同一VPC。具體操作,請參見創建和管理交換機。
已為集群安裝ALB Ingress Controller組件。具體操作,請參見管理ALB Ingress Controller組件。
- 您已通過kubectl連接到集群。具體操作,請參見通過kubectl連接Kubernetes集群。
注意事項
如果您使用的是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
拷貝以下內容到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支持的地域與可用區。
執行以下命令,創建AlbConfig。
kubectl apply -f alb-test.yaml
預期輸出:
albconfig.alibabacloud.com/alb-demo created
創建并拷貝以下內容到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
執行以下命令,創建IngressClass。
kubectl apply -f alb.yaml
預期輸出:
ingressclass.networking.k8s.io/alb created
步驟二:部署服務
創建并拷貝以下內容到cafe-service.yaml文件中,用于部署兩個名稱分別為
coffee
和tea
的Deployment,以及兩個名稱分別為coffee
和tea
的Service。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
執行以下命令,部署兩個Deployment和兩個Service。
kubectl apply -f cafe-service.yaml
預期輸出:
deployment "coffee" created service "coffee-svc" created deployment "tea" created service "tea-svc" created
查看創建的應用和服務的狀態。
執行以下命令,查看應用的狀態。
kubectl get deploy
預期輸出:
NAME READY UP-TO-DATE AVAILABLE AGE coffee 1/2 2 1 2m26s tea 1/1 1 1 2m26s
執行以下命令,查看服務的狀態。
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
創建并拷貝以下內容到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
執行以下命令,配置
coffee
和tea
服務對外暴露的域名和path
路徑。kubectl apply -f cafe-ingress.yaml
預期輸出:
ingress.networking.k8s.io/cafe-ingress created
執行以下命令獲取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服務高級用法。
如需自定義ALB Ingress的轉發規則,自行配置轉發條件和動作,請參見自定義ALB Ingress的轉發規則。
如需讓HTTPS監聽轉發來自HTTPS協議的請求,請參見使用ALB Ingress配置HTTPS監聽證書。
如果您在使用ALB Ingress過程中遇到問題,可先參見ALB Ingress異常問題排查、ALB Ingress FAQ自助排查問題。