Azure 入口规则不适用于LoadBalancer类型的服务
我正在尝试向内部负载平衡器添加入口规则。根据dock,它可以重定向到服务。只要服务是“ClusterIP”,它就可以工作,但当它的“LoadBalancer”运行时,它会转到无限重定向 行得通但不行。区别在于aks helloworld是一个集群,但演示后端是一个负载平衡器Azure 入口规则不适用于LoadBalancer类型的服务,azure,kubernetes,kubernetes-helm,kubernetes-ingress,azure-aks,Azure,Kubernetes,Kubernetes Helm,Kubernetes Ingress,Azure Aks,我正在尝试向内部负载平衡器添加入口规则。根据dock,它可以重定向到服务。只要服务是“ClusterIP”,它就可以工作,但当它的“LoadBalancer”运行时,它会转到无限重定向 行得通但不行。区别在于aks helloworld是一个集群,但演示后端是一个负载平衡器 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: demo-ingress annotations: kubernetes.io/ing
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: demo-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- demo.azure.com
secretName: aks-ingress-tls
rules:
- host: demo.azure.com
http:
paths:
- path: /
backend:
serviceName: aks-helloworld
servicePort: 80
- path: /demo
backend:
serviceName: demo-backend
servicePort: 80
13:33 $ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aks-helloworld ClusterIP 10.0.204.168 <none> 80/TCP 15m
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 16h
demo-backend LoadBalancer 10.0.198.251 23.99.128.86 80:30332/TCP 15h
13:33$kubectl获得服务
名称类型CLUSTER-IP外部IP端口年龄
aks helloworld ClusterIP 10.0.204.168 80/TCP 15米
kubernetes ClusterIP 10.0.0.1 443/TCP 16h
演示后端LoadBalancer 10.0.198.251 23.99.128.86 80:30332/TCP 15h
如果您对资源使用入口,为什么要将服务公开为“LoadBalancer”类型?本质上,您是在访问入口loadbalancer,然后访问另一个服务loadbalancer,这可能是导致此重定向问题的原因。对于您的问题,我认为问题不在于一个具有clusterIP类型,另一个具有loadbalancer类型。当流量通过这两种方式进入时,它们都将重定向到服务,在您的情况下,是demo后端
请参见我这边的测试结果:
互联网接入:
我没有添加TLS,但我认为无论是否有TLS,流量都将重定向到服务。当我通过helm安装第二个应用程序时,我只是用--set serviceType=“LoadBalancer”
更改命令。因此,您可以检查您的步骤是否有问题
但我不认为这是一个好办法,路线交通都在这两种方式到一个服务。如果您通过入口使用TLS,同时使用LoadBalancer时将不安全。因为流量将通过LoadBalancer绕过TLS
更新
根据您的评论,我认为您需要为应用程序创建一个部署,然后使用它创建一个服务,文件如下:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 1
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: yourImage
ports:
- containerPort: 80
name: myapp
---
apiVersion: v1
kind: Service
metadata:
name: demo-backend
labels:
app: myapp
spec:
type: ClusterIP
selector:
app: myapp
ports:
- port: 80
name: http
部署是应用程序的基础,服务只接受pod的流量。因此,我猜您错过了部署,因此您可以访问您的应用程序。问题是因为引擎控制器添加了以下标题
X-FORWARDED-PROTO: https
X-FORWARDED-PORT: 443
回答虽然我不知道你关于LB的问题的具体答案,因为我不能说我已经尝试过那种特定的设置,但别忘了你可以创建一个
demo-backend2
服务
,具有相同的端口:
和选择器:
,并指出你的入口,如果没有其他原因,除了作为一个有趣的故障排除练习,它确实看起来像是重写目标
在您的设置中没有任何积极作用;你试过移除它吗?更好的是,你想用它做什么?你有这个注释`service.beta.kubernetes.io/azure-load-balancer-internal:“true”`在你的演示后端LoadBalancer服务上吗?@MatthewLDaniel我试着用ClusterIP创建演示后端2,但指出入口仍然不起作用。也移除了重新布线目标。它只是说“页面没有正确重定向”,我在跟随@Alex我添加了注释,似乎没有任何区别。它的用途是什么,最初创建服务负载平衡器是为了内部服务对服务通信。但正如我在评论中提到的,我创建了一个重复的服务,类型为ClusterIP,选择相同的后端。但似乎不起作用。我理解您对LoadBalancer的担忧,一旦入口工作,我将删除它。我通过helm安装了演示应用程序,但我自己的应用程序通过清单安装---apiVersion:v1种类:服务元数据:名称:演示后端标签:应用程序:myapp规范:类型:ClusterIP选择器:应用程序:我的端口:-名称:http端口:80 targetPort:8080对于HTTPS,我是否需要在服务中添加以下内容?-名称:https端口:443 targetPort:8080如果您将入口与TLS一起使用来解析https,则无需在部署中为您的应用程序公开端口443。Ingress为您解决它。好的,明白了,但是当我为路由到我的部署的服务提供映射时,它只到达404默认后端,当我点击指向服务的路由并与helm创建的部署对话时,它工作了。通过头盔部署和应用部署有什么区别manifest@NeilHelm只是一个用于Kubernetes的工具,如apt或yum for Linux。我认为除了方便之外没有什么区别。