我已经部署了一项服务并将其配置为通过 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 部署上下文。
我错过了什么?