Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当使用带有路径重定向的nginx kubernetes路由负载平衡器时,为什么我不能正确访问我的服务?_Kubernetes_Kubernetes Helm_Nginx Ingress_Azure Aks - Fatal编程技术网

当使用带有路径重定向的nginx kubernetes路由负载平衡器时,为什么我不能正确访问我的服务?

当使用带有路径重定向的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

我正在使用AKS和Helm v2.2尝试部署一个图表,该图表利用nginx LoadBalancer Pod通过单个ip地址控制所有进入我的服务的行为。这在很大程度上处于实验阶段,但我已经证明,当我为我的.net core webapi服务使用以下Helm ingress配置时:

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伟大的回答。