入口规则不适用于LoadBalancer类型的服务

时间:2019-02-09 08:12:38

标签: azure kubernetes kubernetes-helm kubernetes-ingress azure-aks

我正在尝试向内部负载均衡器添加入口规则。根据扩展坞,它可以重定向到服务。只要服务是“ ClusterIP”,它就可以工作,但是当它的“ LoadBalancer”服务进入无限重定向时

[(1, 2), (3, 2)]

https://demo.azure.com有效,但https://demo.azure.com/demo无效。区别在于aks-helloworld是ClusterIP,而demo-backend是LoadBalancer

import networkx as nx

G=nx.MultiDiGraph()

G.add_edge(1,2,attr=0.5)
G.add_edge(3,2,attr=1.0)

path = nx.shortest_path(G.to_undirected(), source=1, target=3)
path_edges = zip(path, path[1:])
path_subgraph = G.subgraph(path)

for i in path_edges:
    if i in path_subgraph.edges():
        print(f'{i[0]} to {i[1]} (forward)')
    else:
        print(f'{i[0]} to {i[1]} (reverse)')

# 1 to 2 (forward)
# 2 to 3 (reverse)

3 个答案:

答案 0 :(得分:1)

对于您的问题,我认为这不是一个问题的类型是clusterIP,而另一个的类型是LoadBalancer。当两种方式的流量进入时,它们都将重定向到该服务(在您的情况下为demo-backend)。

查看我这一边的测试结果:

enter image description here

从Internet访问:

enter image description here enter image description here

我没有添加TLS,但我认为无论是否具有TLS,流量都将全部重定向到该服务。通过头盔安装第二个应用程序时,我只是使用--set serviceType="LoadBalancer"更改了命令。因此,您可以检查自己的步骤是否有问题。

但我认为这不是将这两种方式的流量都路由到一项服务的好方法。如果您通过Ingress使用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的流量。因此,我想您会错过部署,因此您可以访问您的应用程序。

答案 1 :(得分:0)

如果您对资源使用Ingress,为什么将服务以“ LoadBalancer”类型公开?您本质上是在遇到一个入口负载均衡器,然后又是另一个服务负载均衡器,这可能导致此重定向问题。

答案 2 :(得分:0)

问题是由于引擎控制器添加了以下标头。

X-FORWARDED-PROTO: https
X-FORWARDED-PORT: 443

回答https://stackoverflow.com/a/54880257/747456