当使用带有路径重定向的nginx kubernetes路由负载平衡器时,为什么我不能正确访问我的服务?
我正在使用AKS和Helm v2.2尝试部署一个图表,该图表利用nginx LoadBalancer Pod通过单个ip地址控制所有进入我的服务的行为。这在很大程度上处于实验阶段,但我已经证明,当我为我的.net core webapi服务使用以下Helm ingress配置时:当使用带有路径重定向的nginx kubernetes路由负载平衡器时,为什么我不能正确访问我的服务?,kubernetes,kubernetes-helm,nginx-ingress,azure-aks,Kubernetes,Kubernetes Helm,Nginx Ingress,Azure Aks,我正在使用AKS和Helm v2.2尝试部署一个图表,该图表利用nginx LoadBalancer Pod通过单个ip地址控制所有进入我的服务的行为。这在很大程度上处于实验阶段,但我已经证明,当我为我的.net core webapi服务使用以下Helm ingress配置时: ingress: enabled: true annotations: kubernetes.io/ingress.class: nginx hosts: - host: pat
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
hosts:
- host:
paths:
- /
我确实可以访问我公开的api,并在
http://[My External IP]/index.html
然后我想做的是在同一个LoadBalancer后面放置几个服务(正如您希望的那样),这样我就可以将上面的服务配置更改为如下内容:
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
hosts:
- host:
paths:
- /serviceA
这意味着我可以通过现在更新的url访问相同的服务:
http://[My External IP]/serviceA/index.html
这是我应该期待的工作吗?我是否需要使用任何类型的重写系统,因为到目前为止,我从这个url返回的错误表明它无法找到某些丢失的资源。任何使用重写注释的尝试都没有在这里对我有所帮助。有人能帮我指出我做错了什么吗?对于新的url路径,我在index.html页面试图加载的文件上出现了以下类型的错误,这表明它工作了一半,但需要重新编写还是什么
Failed to load resource: the server responded with a status of 404 ()
作为舵图模板引擎的结果,将创建以下入口yaml文件:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: myrelease-release-manager
labels:
app.kubernetes.io/name: release-manager
helm.sh/chart: release-manager-0.1.0
app.kubernetes.io/instance: release-name
app.kubernetes.io/version: "1.0"
app.kubernetes.io/managed-by: Tiller
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /serviceA
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host:
http:
paths:
- path: /serviceA
backend:
serviceName: myrelease-release-manager
servicePort: 80
由于此入口文件,当我使用路径/serviceA/index.html访问外部ip地址时,我希望访问此服务。关闭,您需要将重写目标更新为/$2
nginx.ingress.kubernetes.io/rewrite-target: /$2
重写
/服务B/foo->/foo
/服务a/foo->/foo
但每一个都将指向该路径的服务
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: myrelease-release-manager
labels:
app.kubernetes.io/name: release-manager
helm.sh/chart: release-manager-0.1.0
app.kubernetes.io/instance: release-name
app.kubernetes.io/version: "1.0"
app.kubernetes.io/managed-by: Tiller
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- backend:
serviceName: serviceB
servicePort: 80
path: /serviceB(/|$)(.*)
- backend:
serviceName: serviceA
servicePort: 80
path: /serviceA(/|$)(.*)
关闭时,需要将重写目标更新为/$2
nginx.ingress.kubernetes.io/rewrite-target: /$2
重写
/服务B/foo->/foo
/服务a/foo->/foo
但每一个都将指向该路径的服务
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: myrelease-release-manager
labels:
app.kubernetes.io/name: release-manager
helm.sh/chart: release-manager-0.1.0
app.kubernetes.io/instance: release-name
app.kubernetes.io/version: "1.0"
app.kubernetes.io/managed-by: Tiller
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- backend:
serviceName: serviceB
servicePort: 80
path: /serviceB(/|$)(.*)
- backend:
serviceName: serviceA
servicePort: 80
path: /serviceA(/|$)(.*)
你能否发布整个
入口
,这也取决于你到底想要实现什么。如果要重写路径,请使用“重写”;如果要路由到其他路径,请使用该路径。@cru我已将模板化入口文件的结果添加到原始问题中。像重写目标、路径和主机之类的东西让我很困惑。我想通过路径https://[My external IP]/serviceA/index.html访问此服务,然后在/serviceB和/serviceC上访问后续的其他服务,等等。您能否发布整个ingress
,这也取决于您到底想实现什么。如果要重写路径,请使用“重写”;如果要路由到其他路径,请使用该路径。@cru我已将模板化入口文件的结果添加到原始问题中。像重写目标、路径和主机之类的东西让我很困惑。我想通过https://[My external IP]/serviceA/index.html路径访问此服务,然后通过/serviceB和/serviceC等路径访问后续其他服务。谢谢@strongjz伟大的回答。谢谢@strongjz伟大的回答。