0

我已经部署了一项服务并将其配置为通过 nginx-ingress 主机公开,但是当我尝试调用 APIcurl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://acme.com/api/platforms 时出现错误:

HTTP/1.1 404 Not Found
Date: Sun, 06 Mar 2022 03:18:35 GMT
Server: Apache/2.4.51 (Debian)
Content-Length: 270
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>

我的理解是,这应该是开箱即用的——我已经在主机文件中添加了一个条目,如下所示:

主机

当我将服务公开为 NodePort 时,它可以正常工作,但是一旦我切换到入口,它就不再可访问(来自 curl 和 Postman)。

我的直接假设是它们是我应该配置的其他东西(特定于 Linux 系统)。我在 Windows 10 PC + minikube 设置上完成了完全相同的部署,在向 Windows 主机文件添加条目后,我可以从 curl 和 Postman 访问 API。

这就是应用入口的方式:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-srv
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
  rules:
    - host: acme.com
      http:
        paths:
          - path: /api/platforms
            pathType: Prefix
            backend:
              service:
                name: platforms-clusterip-srv
                port:
                  number: 80
          - path: /api/c/platforms
            pathType: Prefix
            backend:
              service:
                name: commands-clusterip-srv
                port:
                  number: 80

和部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: platforms-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: platformservice
  template:
    metadata:
      labels:
        app: platformservice
    spec:
      containers:
        - name: platformservice
          image: gold/platformservice:0.0.3
---
apiVersion: v1
kind: Service
metadata:
  name: platforms-clusterip-srv
spec:
  type: ClusterIP
  selector:
    app: platformservice
  ports:
  - name: platformservice
    protocol: TCP
    port: 80
    targetPort: 80

唯一的变化是我已从 Windows+minikube 上下文切换到 Debian 10 Server + k0S 部署上下文。

我错过了什么?

4

0 回答 0