Ingress 无法在 Kubernetes v1.21.5 中找到后端服务
Ingress unable to find backend service in Kubernetes v1.21.5
我在 docker 上使用 Kubernetes v1.21.5。以下是我的入口 YAML 文件
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- host: triver.dev
http:
paths:
- path: /service/account/?(.*)
pathType: Prefix
backend:
service:
name: auth-srv
port:
number: 3000
我是运行一个auth srv镜像,下面是它的YAML文件
kind: Deployment
metadata:
name: auth-depl
spec:
replicas: 1
selector:
matchLabels:
app: auth
template:
metadata:
labels:
app: auth
spec:
containers:
- name: auth
image: triver/auth
env:
- name: MONGO_URI
value: 'mongodb://mongo-srv:27017/auth'
- name: JWT_KEY
valueFrom:
secretKeyRef:
name: jwt-secret
key: JWT_KEY
---
apiVersion: v1
kind: Service
metadata:
name: auth-srv
spec:
selector:
app: auth
ports:
- name: auth
protocol: TCP
port: 3000
targetPort: 3000
但是当我尝试向我在 auth 服务中创建的任何路由发送请求时,例如我创建了一个 triver。dev/service/account/signup post 快速路由器供用户注册。当我尝试通过 Postman 向路由发送 post 请求时,它给出了 ECONNRefused 错误 (404)。无法发送请求。为什么会这样? (我的 postman 工作正常。这不是 postman 端的问题。)
我做错了什么
该应用程序可以运行,但我就是无法访问路线。这绝对是一个入口问题。有谁可以帮助我吗?这是一个非常重要的项目。
This is what show up when I use the command 'kubectl get ingress'
Everything works fine when I run the application using skaffold dev.
这是因为你没有在 ingress 中提到主机名,同时确保你的 ingress controller 是 运行
入口示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: hello-world.info
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 8080
主持人:你好-world.info
参考:https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/
您也可以结帐:https://kubernetes.io/docs/concepts/services-networking/ingress/
如果您已在 ingress 中设置默认后端并且 host 不是问题
确保您在 HTTP 而不是 HTTPS
上发送请求
nginx.ingress.kubernetes.io/ssl-redirect: "false"
因为您没有使用证书SSL/TLS所以请尝试URL和HTTP
我在 docker 上使用 Kubernetes v1.21.5。以下是我的入口 YAML 文件
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- host: triver.dev
http:
paths:
- path: /service/account/?(.*)
pathType: Prefix
backend:
service:
name: auth-srv
port:
number: 3000
我是运行一个auth srv镜像,下面是它的YAML文件
kind: Deployment
metadata:
name: auth-depl
spec:
replicas: 1
selector:
matchLabels:
app: auth
template:
metadata:
labels:
app: auth
spec:
containers:
- name: auth
image: triver/auth
env:
- name: MONGO_URI
value: 'mongodb://mongo-srv:27017/auth'
- name: JWT_KEY
valueFrom:
secretKeyRef:
name: jwt-secret
key: JWT_KEY
---
apiVersion: v1
kind: Service
metadata:
name: auth-srv
spec:
selector:
app: auth
ports:
- name: auth
protocol: TCP
port: 3000
targetPort: 3000
但是当我尝试向我在 auth 服务中创建的任何路由发送请求时,例如我创建了一个 triver。dev/service/account/signup post 快速路由器供用户注册。当我尝试通过 Postman 向路由发送 post 请求时,它给出了 ECONNRefused 错误 (404)。无法发送请求。为什么会这样? (我的 postman 工作正常。这不是 postman 端的问题。)
我做错了什么
该应用程序可以运行,但我就是无法访问路线。这绝对是一个入口问题。有谁可以帮助我吗?这是一个非常重要的项目。
This is what show up when I use the command 'kubectl get ingress'
Everything works fine when I run the application using skaffold dev.
这是因为你没有在 ingress 中提到主机名,同时确保你的 ingress controller 是 运行
入口示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: hello-world.info
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 8080
主持人:你好-world.info
参考:https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/
您也可以结帐:https://kubernetes.io/docs/concepts/services-networking/ingress/
如果您已在 ingress 中设置默认后端并且 host 不是问题
确保您在 HTTP 而不是 HTTPS
上发送请求nginx.ingress.kubernetes.io/ssl-redirect: "false"
因为您没有使用证书SSL/TLS所以请尝试URL和HTTP