【问题标题】:Minikube with Ingress local image configurationMinikube 与 Ingress 本地镜像配置
【发布时间】:2019-12-05 17:39:26
【问题描述】:

当我使用我的 NodePort 服务时,我可以访问我的应用程序。但是当我尝试通过 Ingress 访问它时,我总是得到 HTTP 404。 这张图片中的测试图片gcr.io/google-samples/hello-app:1.0 不会发生这种情况,我有回应。 这是我的部署:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: app-backend-deployment
 labels:
  app: app-backend
spec:
 replicas: 1
 selector:
    matchLabels:
      app: app-backend
 template:
    metadata:
      labels:
        app: app-backend
    spec:
     containers:
     - name: app-backend
       image: go-app-backend
       ports:
       - containerPort: 8100
       imagePullPolicy: Never

我的 NodePort 服务:

apiVersion: v1
kind: Service
metadata:
 labels:
  app: app-backend-deployment
 name: app-backend-svc-nodeport
spec:
 type: NodePort
 ports:
 - port: 8020
   protocol: TCP
   targetPort: 8100
 selector:
  app: app-backend

当我打电话给$ minikube service church-backend-svc-nodeport --url 时,我得到了我的应用运行的地址。

但是当我尝试配置我的应用以获取 Ingress 上的路由时,它不起作用:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
 annotations:
  nginx.ingress.kubernetes.io/rewrite-target: /$1
 name: app-backend-ingress
spec:
 rules:
 - host: app-backend.io
   http:
     paths:
       - backend:
          serviceName: app-backend-svc-nodeport
          servicePort: 8020
         path: /backend

但是当我使用示例 hello word app (https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/) 进行配置并替换 ingress.yml 中的所有内容时,一切正常。谁能看看这个并告诉我我做错了什么?

【问题讨论】:

    标签: kubernetes-ingress minikube


    【解决方案1】:

    如果我没记错的话,您需要在后端path: /backend(/|$)(.*) 和元数据nginx.ingress.kubernetes.io/rewrite-target: /$2 下放入入口

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
      name: app-backend-ingress
    spec:
      rules:
      - host: app-backend.io
        http:
          paths:
          - backend:
            serviceName: app-backend-svc-nodeport
            servicePort: 8020
            path: /backend(/|$)(.*)
    

    【讨论】:

    • 嗯工作,谢谢!你能解释一下你做了什么吗?这很奇怪。我有 h2 数据库,它应该可以在 app-backend.io/backend/h2 上运行,但它可以在 app-backend.io/backend/h2/ 上运行,而且如果我只是输入 app-backend.io/backend,我仍然有 404,但我认为它来自 minikube,而不是来自我的应用程序
    • kubernetes.github.io/ingress-nginx/examples/rewrite 有答案但我不太明白 rewrite-target
    • 在您的原始配置中,nginx 会理解 url /backend 应该被重写为 //backend 因为您配置了 rewrite-target 应该是 ="/" + $1 其中 $1 是完全匹配的 url(路径) 例如/backend/about... 所以我添加了 2 个捕获 (/|$)(.*) 其中首先删除根路径 /<empty> 如果我们只有 /backend 路径,然后在第二次捕获它需要所有字符直到路径的尽头。然后将第二次捕获($2)与/ 组合为重写规则中的/$2,因为第一次捕获将采用/,因此我们需要将其放回原处。
    猜你喜欢
    • 2019-03-10
    • 2020-01-06
    • 2019-10-18
    • 2017-07-22
    • 2021-12-17
    • 2019-12-05
    • 2022-10-14
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多