问题描述
在我的 k8s 系统中,我有一个 Nginx 入口控制器作为 LoadBalancer 并访问它到像 hedehodo.ddns.net 这样的 ddns 地址,这触发将网络流量转发到另一个 Nginx 端口。 现在我部署了另一个适用于 node.js 应用程序的 Nginx,但我无法将 Nginx 入口控制器转发到端口 3000 的任何请求以转到另一个 Nginx
这里是 Nginx 入口控制器 yaml
apiVersion: extensions/v1beta1
kind: Ingress
Metadata:
name: test-ingress
namespace: default
spec:
rules:
- host: hedehodo.ddns.net
http:
paths:
- path: /
backend:
serviceName: my-Nginx
servicePort: 80
- path: /
backend:
serviceName: helloapp-deployment
servicePort: 3000
helloapp 部署工作负载均衡器,我可以从 IP:3000 访问它
有人能帮我吗?
解决方法
每个主机不能共享多个重复路径,因此在您的示例中,对主机的请求:hedehodo.ddns.net
将始终映射到列出的第一个服务:my-nginx:80
。
要使用其他服务,您必须指定不同的路径。该路径可以使用您想要的任何服务。您的入口应始终指向一个服务,而该服务可以指向一个部署。
您还应该默认为您的入口使用 HTTPS。
入口示例:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
spec:
rules:
- host: my.example.net
http:
paths:
- path: /
backend:
serviceName: my-nginx
servicePort: 80
- path: /hello
backend:
serviceName: helloapp-svc
servicePort: 3000
服务示例:
---
apiVersion: v1
kind: Service
metadata:
name: helloapp-svc
spec:
ports:
- port: 3000
name: app
protocol: TCP
targetPort: 3000
selector:
app: helloapp
type: NodePort
部署示例:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: helloapp
labels:
app: helloapp
spec:
replicas: 1
selector:
matchLabels:
app: helloapp
template:
metadata:
labels:
app: helloapp
spec:
containers:
- name: node
image: my-node-img:v1
ports:
- name: web
containerPort: 3000
,
您不能为同一主机使用相同的“路径:/”。将路径更改为新服务的不同路径。