GCP - 如何使用 Ingress 在负载均衡器上服务多个应用程序?
GCP - How to serve multiple applications on a load balancer using Ingress?
我正在尝试在 GCP 上的 kubernetes 上设置负载平衡,但现在卡住了。
所以我一直在学习本教程 (Tutorial),但我无法通过 第 6 步:(可选)在负载均衡器上提供多个应用程序
我正在使用一个节点简单应用程序,它只从配置映射中打印一个名称。
按照每一步操作后,找不到我的路径 (404)。
这是我的部署示例(我的两个服务都使用 "the same" 部署,仅更改名称和图像):
kind: Deployment
metadata:
name: nodetestfoo
namespace: default
spec:
selector:
matchLabels:
run: nodetestfoo
template:
metadata:
labels:
run: nodetestfoo
spec:
containers:
- image: gcr.io/e3-dev-227917/nodetestfoo:v4
imagePullPolicy: IfNotPresent
name: nodetestfoo
ports:
- containerPort: 3333
protocol: TCP
envFrom:
- configMapRef:
name: env-config
---
apiVersion: v1
kind: Service
metadata:
name: nodetestfoo
namespace: default
spec:
ports:
- port: 3333
protocol: TCP
targetPort: 3333
selector:
run: nodetestfoo
type: NodePort
这是我的入口:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: api-ingress
spec:
rules:
- http:
paths:
- path: /test
backend:
serviceName: nodetest
servicePort: 3333
- path: /foo
backend:
serviceName: nodetestfoo
servicePort: 3333
我的 kubectl describe ingress 输出:
使用路径的请求响应
没有路径的请求的响应(这个默认后端确实不存在,所以我相信这是预期的行为)
我应该怎么做才能让它发挥作用?我有点迷路了。 (很明显我是cloud新手,刚开始学习)
根据this修改入口如下
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: api-ingress
spec:
rules:
- http:
paths:
- path: /test/*
backend:
serviceName: nodetest
servicePort: 3333
- path: /foo/*
backend:
serviceName: nodetestfoo
servicePort: 3333
所以,评论中的 ingress-nginx project brought up by Rexovas 确实帮助了我!
我将不得不花更多时间阅读和理解该项目,但在快速测试中我发现它运行良好!
我不得不将它添加到我的 kubernetes 中,并将以下注释添加到我的入口中:
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /
现在我可以毫无问题地访问我的不同路径! :D
目前我不知道这个解决方案到底有多可靠 is.Just 感觉很奇怪必须使用 "third-part" 项目才能使其工作
如果出现任何问题,我会更新post
让我告诉你你做了什么。您获得了功能配置,但没有给它足够的时间来部署负载均衡器。通常需要大约 5 分钟才能拥有一个功能正常的 http
负载均衡器。但是您可能很着急,并且永远不会让它得到完全配置。所以,只要回到原来的 Ingress
,创建它,然后等待。大约 5 分钟后,卷曲它。
你说的是 "I had to add this annotation..."。通过添加该注解,您可以切换到另一个 Ingress Controller(您之前必须安装它)。 Nginx Ingress Controller 需要几毫秒才能准备好,因为只需要更新 nginx 服务器配置文件。此外,流量还通过一个 tcp
负载均衡器,它也很快准备就绪,到达 Ingress Controller,它是一个 pod。所以在这里你有一个负载均衡器,它在大约 30 秒内准备就绪,因此它似乎可以工作,而另一个没有。
现在,我之所以这样说,是因为您似乎对发生的事情有点困惑,而不是因为我建议您返回到 GKE Ingress Controller。您可能仍想坚持使用 nginx Ingress Controller。这是可靠的。出于几个原因,我个人比 GKE 更喜欢它。或者你可能会得到任何其他结果。现在有数十个 Ingress Controller。
我正在尝试在 GCP 上的 kubernetes 上设置负载平衡,但现在卡住了。 所以我一直在学习本教程 (Tutorial),但我无法通过 第 6 步:(可选)在负载均衡器上提供多个应用程序
我正在使用一个节点简单应用程序,它只从配置映射中打印一个名称。 按照每一步操作后,找不到我的路径 (404)。
这是我的部署示例(我的两个服务都使用 "the same" 部署,仅更改名称和图像):
kind: Deployment
metadata:
name: nodetestfoo
namespace: default
spec:
selector:
matchLabels:
run: nodetestfoo
template:
metadata:
labels:
run: nodetestfoo
spec:
containers:
- image: gcr.io/e3-dev-227917/nodetestfoo:v4
imagePullPolicy: IfNotPresent
name: nodetestfoo
ports:
- containerPort: 3333
protocol: TCP
envFrom:
- configMapRef:
name: env-config
---
apiVersion: v1
kind: Service
metadata:
name: nodetestfoo
namespace: default
spec:
ports:
- port: 3333
protocol: TCP
targetPort: 3333
selector:
run: nodetestfoo
type: NodePort
这是我的入口:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: api-ingress
spec:
rules:
- http:
paths:
- path: /test
backend:
serviceName: nodetest
servicePort: 3333
- path: /foo
backend:
serviceName: nodetestfoo
servicePort: 3333
我的 kubectl describe ingress 输出:
使用路径的请求响应
没有路径的请求的响应(这个默认后端确实不存在,所以我相信这是预期的行为)
我应该怎么做才能让它发挥作用?我有点迷路了。 (很明显我是cloud新手,刚开始学习)
根据this修改入口如下
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: api-ingress
spec:
rules:
- http:
paths:
- path: /test/*
backend:
serviceName: nodetest
servicePort: 3333
- path: /foo/*
backend:
serviceName: nodetestfoo
servicePort: 3333
所以,评论中的 ingress-nginx project brought up by Rexovas 确实帮助了我! 我将不得不花更多时间阅读和理解该项目,但在快速测试中我发现它运行良好!
我不得不将它添加到我的 kubernetes 中,并将以下注释添加到我的入口中:
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /
现在我可以毫无问题地访问我的不同路径! :D
目前我不知道这个解决方案到底有多可靠 is.Just 感觉很奇怪必须使用 "third-part" 项目才能使其工作
如果出现任何问题,我会更新post
让我告诉你你做了什么。您获得了功能配置,但没有给它足够的时间来部署负载均衡器。通常需要大约 5 分钟才能拥有一个功能正常的 http
负载均衡器。但是您可能很着急,并且永远不会让它得到完全配置。所以,只要回到原来的 Ingress
,创建它,然后等待。大约 5 分钟后,卷曲它。
你说的是 "I had to add this annotation..."。通过添加该注解,您可以切换到另一个 Ingress Controller(您之前必须安装它)。 Nginx Ingress Controller 需要几毫秒才能准备好,因为只需要更新 nginx 服务器配置文件。此外,流量还通过一个 tcp
负载均衡器,它也很快准备就绪,到达 Ingress Controller,它是一个 pod。所以在这里你有一个负载均衡器,它在大约 30 秒内准备就绪,因此它似乎可以工作,而另一个没有。
现在,我之所以这样说,是因为您似乎对发生的事情有点困惑,而不是因为我建议您返回到 GKE Ingress Controller。您可能仍想坚持使用 nginx Ingress Controller。这是可靠的。出于几个原因,我个人比 GKE 更喜欢它。或者你可能会得到任何其他结果。现在有数十个 Ingress Controller。