【发布时间】:2021-12-27 17:17:09
【问题描述】:
我正在尝试使用基于路径的路由在 kubernetes 上使用 nginx 入口控制器组合我们的几个微服务。
这是场景:
http://myapi.develop.mydomain.com/data-service/request -> 转到服务名称 http://myapi.develop.mydomain.com/model-service/request -> 转到服务名称
我的问题是,当 url/path 到达后端服务时,它会从请求中获取 url。
所以/data-service/request 以/data-service/request 的身份点击应用程序并需要它以/request 的身份点击应用程序(但仍以/data-service/request 向用户显示)
尝试从这里查看使用入口重写规则: https://kubernetes.github.io/ingress-nginx/examples/rewrite/
虽然不太确定这是否会改变用户的 url 或只是从入口到服务。我们需要 url 对最终用户保持不变,并且更改只在集群内。
这是我们正在使用的入口 yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapi-ingress
namespace: mynamespace
uid:
resourceVersion: ''
generation: 1
creationTimestamp: '2021-11-16T15:12:42Z'
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
managedFields:
- manager: kubectl-create
operation: Update
apiVersion: networking.k8s.io/v1
time: '2021-11-16T15:12:42Z'
fieldsType: FieldsV1
fieldsV1:
'f:metadata':
'f:annotations':
.: {}
'f:nginx.ingress.kubernetes.io/rewrite-target': {}
'f:spec':
'f:ingressClassName': {}
'f:rules': {}
- manager: nginx-ingress
operation: Update
apiVersion: networking.k8s.io/v1
time: '2021-11-16T15:12:42Z'
fieldsType: FieldsV1
fieldsV1:
'f:status':
'f:loadBalancer':
'f:ingress': {}
selfLink: /apis/networking.k8s.io/v1/namespaces/mynamespace/ingresses/myapi-ingress
status:
loadBalancer:
ingress:
- ip: myip
spec:
ingressClassName: nginx
rules:
- host: myapi.mynamespace.mydomain.com
http:
paths:
- path: /data-service(/|$)(.*)
pathType: Prefix
backend:
service:
name: data-service
port:
number: 3000
- path: /model-service(/|$)(.*)
pathType: Prefix
backend:
service:
name: model-service
port:
number: 3000
有人指出我可能会出错的地方吗?
【问题讨论】:
-
我想在本地重现此问题 - 您使用的是哪个 Kubernetes 版本?
-
刚刚升级到1.21.2
-
我在本地使用nginx image 进行了尝试,它工作正常。您的应用程序如何检查日志?您能否准确分享您申请的 Ingress 资源 yaml?您能否使用 nginx 图像检查行为(您可以使用
kubectl logs {nginx-pod-name}查找请求? -
还没有快乐。我会尝试获取日志
-
这方面有什么更新吗?如果答案有帮助,请您更新问题的状态,如果解决了您的问题,请点赞或标记它。这就是 SO 的工作原理。
标签: kubernetes kubernetes-ingress azure-aks nginx-ingress