我正在尝试向内部负载均衡器添加入口规则。根据扩展坞,它可以重定向到服务。只要服务是“ 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)
答案 0 :(得分:1)
对于您的问题,我认为这不是一个问题的类型是clusterIP,而另一个的类型是LoadBalancer。当两种方式的流量进入时,它们都将重定向到该服务(在您的情况下为demo-backend)。
查看我这一边的测试结果:
从Internet访问:
我没有添加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