我在AKS集群上部署了多个微服务,并在nginx入口控制器上公开了它。指向具有dns的静态IP的入口blabla.eastus.azure.com
应用程序已在blabla.eastus.azure.com/application/和blabla.eastus.azure.com/application2/ ..等上公开。
我已经在Azure的blabla.trafficmanager.net中创建了流量管理器配置文件。我应该如何在流量管理器中配置AKS入口,以便流量管理器将请求重新路由到部署在AKS入口上的应用程序。
---Ingress.yaml configuration used
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
namespace: ns
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- host: blabla.eastus.azure.com
http:
paths:
- backend:
serviceName: application1
servicePort: 80
path: /application1(/|$)(.*)
- backend:
serviceName: application2
servicePort: 80
path: /application2(/|$)(.*)
- backend:
serviceName: aks-helloworld
servicePort: 80
path: /(.*)
当我碰到curl http://blabla.trafficmanager.net
时,响应为默认后端-404
将主机更新为http://blabla.trafficmanager.net
时,我可以通过http://blabla.trafficmanager.net \ application1
对于创建的任何自定义cname都是如此。我创建了一个名为custom.domain.com的cname,并将其重定向到blabla.eastus.azure.com。因此,除非我将入口的主机直接更新为custom.domain.com,否则无法通过自定义域访问它
答案 0 :(得分:1)
一种满足您需求的方法是严格控制每个区域中公共DNS和Ingress Controller公共IP之间的流量;代表 将服务发布到HTTP SNI协议的灵活性:
为简单起见,Ingress Controller没有为其公共IP分配任何DNS记录。
因此,我们将按照该图从右到左实现该体系结构。
流量管理器将具有两个端点:每个区域一个。每个端点的值将是对应的Ingress公用IP。
DNS服务将为app.mydomain.com配置CNAME(别名)为mine-apps.trafficmanager.net。
通过这种方式,连接到app.mydomain.com的客户端将解析流量管理器(TM)服务(即地理DNS),并基于客户端的IP,将与A之间更近的目标区域返回给客户端和B。
以相同的方式,您可以使用URL或基于路径的路由来通过Ingres公开服务,并控制客户端如何连接它们。只要确保您的DNS知道如何连接到流量管理器即可。其余的将被处理 TM和Kubernetes中的Ingress对象令人着迷。
最后但并非最不重要的一点是,一旦正确配置了所有集成并满足了您的主要需求,您就可以开始扩展现有体系结构并适应您的实际需求;例如:在流量管理器的端点中消除静态IP。
答案 1 :(得分:0)
实际请求永远不会通过流量管理器传递。流量管理器是Azure提供的基于DNS的负载平衡解决方案。
浏览Azure TM终结点时,它将解析并提供IP。然后您的浏览器请求该IP地址。
在您的情况下,您的AKS应该具有一个公共端点,TM可以将其解析为DNS查询。另外,您还需要创建一个CNAME记录,以将TM FQDN映射到您的自定义域。如果不这样做,您将得到404。
上述自定义标头设置用于探针,但是实际请求将从客户端浏览器发送到TM解析为的端点/ IP。