具有集群 ip 服务和默认 nginx 的 kubernetes 入口控制器未按预期工作
kubernetes ingress controller with cluster ip service and default nginx not working as expected
有一个有 7 个节点的 kubernetes 裸机集群。
安装了 helm 并添加了一个 helm repo added
- ingress-nginx https://kubernetes.github.io/ingress-nginx
在我的局域网中,我创建了一个在我的局域网中可解析的 dns A 记录。
我可以访问前面提到的 dns A 记录上的苹果和香蕉位置。
当我使用带有端口 80 且类型为 cluster-ip 的服务部署默认 nginx 映像时,以下 nginx-ingress 资源不起作用
kubectl 运行 nginx --image=nginx ; kubectl 暴露 pod nginx --port=80
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-test
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: kubernetes.somename.lan
http:
paths:
- path: /test
pathType: Prefix
backend:
serviceName: nginx
servicePort: 80
我在日志中看到该文件正在 nginx-ingress 映像中部署,与 apple 和 banana 入口条目相比没有发现任何奇怪的地方。我能想到的唯一区别是入口控制器和 nginx 图像是使用端口 80
的机器人
所以我需要的是,当我访问 http://somelan.lan/test 时,我将最终到达 nginx 服务器的占位符(可由 nginx 服务访问)
问题:
我如何在路径 /test 下访问我的 A dns 记录上的 nginx
提前谢谢你
提供的苹果/香蕉示例运行正常,因为 pod 对路径不敏感。它不会对路径更改做出反应(忽略路径)。而 nginx
正好相反。
该博客的注释有误,缺少 nginx
前缀。这是您使用的那个:
ingress.kubernetes.io/rewrite-target
根据docs,这是正确的:
nginx.ingress.kubernetes.io/rewrite-target
好的,经过研究我发现了如何解决这个问题。
希望这可以帮助任何人
https://www.reddit.com/r/kubernetes/comments/j2neuf/nginxingress_path_routing/
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-precious
annotations:
nginx.org/rewrites: "serviceName=nginx-ingress rewrite=/;"
spec:
rules:
- host: kubernetes.somelan.lan
http:
paths:
- path: /test1
backend:
serviceName: nginx-ingress
servicePort: 80
有一个有 7 个节点的 kubernetes 裸机集群。 安装了 helm 并添加了一个 helm repo added
- ingress-nginx https://kubernetes.github.io/ingress-nginx 在我的局域网中,我创建了一个在我的局域网中可解析的 dns A 记录。
我可以访问前面提到的 dns A 记录上的苹果和香蕉位置。
当我使用带有端口 80 且类型为 cluster-ip 的服务部署默认 nginx 映像时,以下 nginx-ingress 资源不起作用
kubectl 运行 nginx --image=nginx ; kubectl 暴露 pod nginx --port=80
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-test
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: kubernetes.somename.lan
http:
paths:
- path: /test
pathType: Prefix
backend:
serviceName: nginx
servicePort: 80
我在日志中看到该文件正在 nginx-ingress 映像中部署,与 apple 和 banana 入口条目相比没有发现任何奇怪的地方。我能想到的唯一区别是入口控制器和 nginx 图像是使用端口 80
的机器人所以我需要的是,当我访问 http://somelan.lan/test 时,我将最终到达 nginx 服务器的占位符(可由 nginx 服务访问)
问题: 我如何在路径 /test 下访问我的 A dns 记录上的 nginx 提前谢谢你
提供的苹果/香蕉示例运行正常,因为 pod 对路径不敏感。它不会对路径更改做出反应(忽略路径)。而 nginx
正好相反。
该博客的注释有误,缺少 nginx
前缀。这是您使用的那个:
ingress.kubernetes.io/rewrite-target
根据docs,这是正确的:
nginx.ingress.kubernetes.io/rewrite-target
好的,经过研究我发现了如何解决这个问题。 希望这可以帮助任何人 https://www.reddit.com/r/kubernetes/comments/j2neuf/nginxingress_path_routing/
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-precious
annotations:
nginx.org/rewrites: "serviceName=nginx-ingress rewrite=/;"
spec:
rules:
- host: kubernetes.somelan.lan
http:
paths:
- path: /test1
backend:
serviceName: nginx-ingress
servicePort: 80