Kubernetes ingress 对于特定服务给出 404 错误

IHe*_*ple 4 nginx kubernetes kubernetes-ingress azure-aks nginx-ingress

我已经在 Azure 上使用 nginx 入口设置了一个 kubernetes 集群。导航到特定路径时出现 404 错误。

我已经设置了一些示例应用程序,它们返回一个简单的回声,效果非常好。我的 ban api 应用程序总是返回 404 错误。

当我导航到入口路径时,例如

http://51.145.17.105/apple
Run Code Online (Sandbox Code Playgroud)

效果很好。但是,当我导航到 api 应用程序时,使用以下 URL 收到 404 错误:

http://51.145.17.105/ban-simple
Run Code Online (Sandbox Code Playgroud)

如果我登录到集群并卷曲 ban-simple 服务(不是入口 ip),例如

curl -L 10.1.1.40
Run Code Online (Sandbox Code Playgroud)

我得到了正确的回应。当我使用 nginx ingress 尝试它时,出现 404 错误。

入口映射对我来说看起来很正确。这是包含路径的入口 yaml 的副本。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fruit-ingress
  namespace: ban
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$
spec:
  rules:
  - http:
      paths:
        - path: /apple
          backend:
            serviceName: apple-service
            servicePort: 5678
        - path: /ban-simple
          backend:
            serviceName: ban-service
            servicePort: 80
Run Code Online (Sandbox Code Playgroud)

“好”服务的一个副本是:

kind: Pod
apiVersion: v1
metadata:
  name: apple-app
  namespace: ban
  labels:
    app: apple
spec:
  containers:
    - name: apple-app
      image: hashicorp/http-echo
      args:
        - "-text=apple"

---

kind: Service
apiVersion: v1
metadata:
  name: apple-service
  namespace: ban
spec:
  selector:
    app: apple
  ports:
    - port: 5678 # Default port for image
Run Code Online (Sandbox Code Playgroud)

不起作用的服务是:

kind: Pod
apiVersion: v1
metadata:
  name: ban-simple
  namespace: ban
  labels:
    app: ban-simple
spec:
  containers:
    - name: ban-simple
      image: xxxxx.azurecr.io/services/ban

---

kind: Service
apiVersion: v1
metadata:
  name: ban-simple-service
  namespace: ban
spec:
  selector:
    app: ban-simple
  ports:
    - port: 80 # Default port for image
Run Code Online (Sandbox Code Playgroud)

我已在本地运行该容器并且它可以在我的机器上运行。如果有影响的话,它会重定向到 localhost/index.html。

任何建议表示赞赏。

IHe*_*ple 5

正是nginx.ingress.kubernetes.io/rewrite-target: /$ 这个原因造成了这个问题。我将其注释掉并解决了问题。