Ingress为Kubernetes集群中对外的七层负载均衡,可通过Ingress规则描述将请求匹配到对应的后端服务和应用上。您可以通过配置多集群Service和Ingress规则,将请求转发到多个集群中的服务。本文介绍如何使用多集群Ingress。
前提条件
已开启舰队管理功能。具体操作,请参见开启舰队管理功能。
Fleet实例已添加多个关联集群,且关联集群为1.21及以上版本。具体操作,请参见添加关联集群。
已从ACK One控制台获取Fleet实例的KubeConfig,并通过kubectl连接至Fleet实例。
已安装AMC命令行工具。具体操作,请参见AMC命令行帮助。
已通过多集群服务将需要多集群的Ingress后端应用和服务打通。更多信息,请参见多集群服务概述。
在需要对外访问Ingress的集群中,已安装Nginx-Ingress-Controller组件并升级到v1.7.0-aliyun.1或以上版本。具体操作,请参见升级Nginx Ingress Controller组件。
使用说明
配置多集群Service和Ingress规则后,您可以将请求转发到多个集群中的服务。使用多集群Ingress示意图如下所示。
本文多集群使用Ingress示例中,对外暴露的Ingress集群为ACK Cluster 1和ACK Cluster 2,部署应用的集群为ACK Cluster 1、ACK Cluster 2和ACK Cluster 3。使用多集群Ingress示意图如下所示。
操作步骤
在两个集群中通过多集群服务能力,分别映射到提供服务的Ingress集群中。
关于配置多集群服务的更多信息,请参见通过命令行管理多集群服务。
分别在每个集群中配置ServiceExport,将集群中的服务导出到多集群Service(MultiCluster Service)中。
分别在对外的Ingress集群中,通过ServiceImport将多集群的Service导入到本集群用于Ingress访问,导入后默认Service名称为
amcs-{service名}
。分别在对外的Ingress集群中,执行以下命令查看导入的服务。
kubectl get service amcs-nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE amcs-nginx ClusterIP 192.168.118.171 <none> 80/TCP 34m kubectl get endpointslice NAME ADDRESSTYPE PORTS ENDPOINTS AGE imported-c0c4a2c9339e44235a5228d0b0ff2259c-nginx-vnlnd IPv4 80 10.0.2.4,10.0.2.5 34m imported-ce962c460ae284243a3161d6f2c7b4cf7-nginx-d8rr5 IPv4 80 10.0.2.221,10.0.2.236 29m imported-ca5b667538054499ab399588efe4ab654-nginx-xfe1a IPv4 80 10.0.2.145,10.0.2.123 20m
分别在对外的Ingress集群中,配置Ingress规则暴露服务。
使用以下YAML内容,创建ingress.yaml文件。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: multi-cluster-nginx-ingress spec: rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: amcs-nginx port: 80
执行以下命令,在对外的Ingress集群中分别配置Ingress规则指向多集群的Service。
kubectl apply -f ingress.yaml
分别查看每个对外的集群Ingress对应的外部端点。
# ACK Cluster 1 kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE multi-cluster-nginx-ingress nginx example.com XX.XX.XX.XX 80 26m # ACK Cluster 2 kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE multi-cluster-nginx-ingress nginx example.com XX.XX.XX.XX 80 26m
通过DNS将域名解析到多个集群的Ingress端点进行访问。
通过DNS的A记录将Ingress的域名解析到多个对外的集群的Ingress地址上,提供客户端访问。关于域名解析的相关操作,请参见添加解析记录。