无法通过nginx入口控制器访问Kubernetes ClusterIP服务
我是Kubernetes的业余爱好者,尝试在GKE上使用NGINX入口控制器。我正在按照谷歌云文档为我的服务设置NGINX入口,但是,我在访问NGINX位置时遇到了问题 什么起作用了 启用Helm RBAC的入口控制器部署 集群服务部署 什么不起作用 使用唯一路径扇出路由公开多个ClusterIP服务的入口资源 K8S服务 附加信息 我试图访问的服务是使用上下文的springboot服务,因此根位置不是有效的端点 相应地定义了容器的就绪性和活动性探测 例如,支付网关开发服务使用的是context/pgw/v1上下文,因此只能通过该上下文访问部署。要访问应用程序的招摇过市规范,可以使用URL http:///pgw/v1/swagger-ui.html 我的部署行为 入口控制器LB ip=35.188.161.171 访问入口控制器负载平衡器会将我带到默认的404后端 访问入口控制器负载平衡器运行状况将按预期返回200 HTTP响应 尝试使用下面的URL访问服务将返回404:page not found错误无法通过nginx入口控制器访问Kubernetes ClusterIP服务,nginx,kubernetes,kubernetes-ingress,Nginx,Kubernetes,Kubernetes Ingress,我是Kubernetes的业余爱好者,尝试在GKE上使用NGINX入口控制器。我正在按照谷歌云文档为我的服务设置NGINX入口,但是,我在访问NGINX位置时遇到了问题 什么起作用了 启用Helm RBAC的入口控制器部署 集群服务部署 什么不起作用 使用唯一路径扇出路由公开多个ClusterIP服务的入口资源 K8S服务 附加信息 我试图访问的服务是使用上下文的springboot服务,因此根位置不是有效的端点 相应地定义了容器的就绪性和活动性探测 例如,支付网关开发服务使用的是context
任何关于我可能做错了什么的建议或见解都将不胜感激。+1对于这个被问得很好的问题 你的设置对我来说似乎是正确的。在你的解释中,我发现你的服务需要http:///pgw/v1/swagger-ui.html 作为上下文。但是,在您的设置中,提交到服务的路径将是http:///qa/pgw/v1/swagger-ui.html 如果您的路线是/qa/ 要删除前缀,您需要做的是向入口添加重写规则:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: pgw-nginx-ingress
namespace: payment-gateway-7682352
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- backend:
serviceName: payment-gateway-dev
servicePort: 5000
path: /dev/(.+)
- backend:
serviceName: payment-gateway-qa
servicePort: 5000
path: /qa/(.+)
在此之后,您的服务应该会收到正确的上下文
参考:
重写:
入口路由匹配:
另一种方法是使用基于主机的路由。您只需为入口静态IP pgw-dev.foo.com、pgw-qa.foo.com创建几个CNAME DNS条目,并用host:attributes替换path:attributes。没有URL重写的必要 imo使用基于主机的方法的最佳理由是对人类的清晰性和灵活性。我在很多不同的地方工作过。几乎所有这些应用程序都使用主机名以这种方式区分环境。味道好极了,馅少了 例如,如果您将DEV和QA拆分到单独的集群中,那么没有人需要更改它们的配置,您的K8s模板将是可重用的。只需更新DNS。如果您想启动一个新的登台或性能测试环境,那么您现有的测试工具应该很容易适应新环境:只需在配置中更改主机名
随着时间的推移,我想您会发现主机名比路径前缀更能自然地区分环境。感谢您的响应,它非常有意义。添加重写规则解决了我的问题。很高兴这解决了您的问题。如果您将此标记为答案,将不胜感激。
[msekar@ebs kube-base]$ kubectl get ing -n payment-gateway-7682352
NAME HOSTS ADDRESS PORTS AGE
pgw-nginx-ingress * 104.198.78.169 80 6h
[msekar@ebs kube-base]$ kubectl describe ing pgw-nginx-ingress -n payment-gateway-7682352
Name: pgw-nginx-ingress
Namespace: payment-gateway-7682352
Address: 104.198.78.169
Default backend: default-http-backend:80 (10.32.1.4:8080)
Rules:
Host Path Backends
---- ---- --------
*
/dev/ payment-gateway-dev:5000 (<none>)
/qa/ payment-gateway-qa:5000 (<none>)
Annotations:
kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.class":"nginx","nginx.ingress.kubernetes.io/ssl-redirect":"false"},"name":"pgw-nginx-ingress","namespace":"payment-gateway-7682352"},"spec":{"rules":[{"http":{"paths":[{"backend":{"serviceName":"payment-gateway-dev","servicePort":5000},"path":"/dev/"},{"backend":{"serviceName":"payment-gateway-qa","servicePort":5000},"path":"/qa/"}]}}]}}
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: false
Events: <none>
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: pgw-nginx-ingress
namespace: payment-gateway-7682352
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- backend:
serviceName: payment-gateway-dev
servicePort: 5000
path: /dev/
- backend:
serviceName: payment-gateway-qa
servicePort: 5000
path: /qa/
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: pgw-nginx-ingress
namespace: payment-gateway-7682352
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- backend:
serviceName: payment-gateway-dev
servicePort: 5000
path: /dev/(.+)
- backend:
serviceName: payment-gateway-qa
servicePort: 5000
path: /qa/(.+)