将 nginx-ingress 主机名引用到内部服务
Reference nginx-ingress host name to internal service
创建所有需要的资源并配置 nginx-ingress 控制器后。
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-api
spec:
replicas: 1
selector:
matchLabels:
app: user-api
strategy: {}
template:
metadata:
labels:
app: user-api
spec:
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
containers:
- name: user-api
image: doumeyi/user-api-amd64:1.0
ports:
- name: user-api
containerPort: 3000
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: user-api
spec:
selector:
app: user-api
ports:
- name: user-api
port: 3000
targetPort: 3000
type: LoadBalancer
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
http:
paths:
- path: /user-api
backend:
serviceName: user-api
servicePort: 3000
我可以查看 example.com
显示 404 未找到页面,但也看不到示例。com/user-api 显示我在 user-api 服务中构建的任何消息。
nginx-ingress 似乎无法将主机名解析为内部服务,我该如何解决?
如果 NGINX 找不到到您的 Pod 的路由,它不应以 404 响应。相反,它应该给出 502(错误的网关)AFAIK。我假设 404 来自您的应用程序。
如前所述,NGINX-Ingress 在 0.22 中更改了行为 here
入口资源应如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
http:
paths:
- path: /user-api(/|$)(.*)
backend:
serviceName: user-api
创建所有需要的资源并配置 nginx-ingress 控制器后。
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-api
spec:
replicas: 1
selector:
matchLabels:
app: user-api
strategy: {}
template:
metadata:
labels:
app: user-api
spec:
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
containers:
- name: user-api
image: doumeyi/user-api-amd64:1.0
ports:
- name: user-api
containerPort: 3000
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: user-api
spec:
selector:
app: user-api
ports:
- name: user-api
port: 3000
targetPort: 3000
type: LoadBalancer
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
http:
paths:
- path: /user-api
backend:
serviceName: user-api
servicePort: 3000
我可以查看 example.com
显示 404 未找到页面,但也看不到示例。com/user-api 显示我在 user-api 服务中构建的任何消息。
nginx-ingress 似乎无法将主机名解析为内部服务,我该如何解决?
如果 NGINX 找不到到您的 Pod 的路由,它不应以 404 响应。相反,它应该给出 502(错误的网关)AFAIK。我假设 404 来自您的应用程序。
如前所述,NGINX-Ingress 在 0.22 中更改了行为 here 入口资源应如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
http:
paths:
- path: /user-api(/|$)(.*)
backend:
serviceName: user-api