我有以下适用的Ingress定义(我使用docker-for-mac):
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: zwoop-ing
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: localhost
http:
paths:
- path: /
backend:
serviceName: posts-api-svc
servicePort: 8083
我感到困惑的是如何处理要公开的多个api微服务。
我想到的选项:
我认为多次进入会花费更多(?)。
由于某些原因,我在使用子路径段(ingress-nginx)时遇到问题。
当我在入口资源中定义- path: /api
时,我在GET请求中收到404。
目前尚不清楚如何定义子路径(在这里我使用/ api,但这将是posts-api,users-api等)。
对于单个posts-api,我目前具有以下设置:
apiVersion: v1
kind: Service
metadata:
name: posts-api-svc
# namespace: nginx-ingress
labels:
app: posts-api
#rel: beta
#env: dev
spec:
type: ClusterIP
selector:
app: posts-api
# rel: beta
# env: dev
ports:
- protocol: TCP
port: 8083
使用部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: posts-api-deployment
# namespace: nginx-ingress
spec:
replicas: 1
selector:
matchLabels:
app: posts-api
template:
metadata:
labels:
app: posts-api
# env: dev
# rel: beta
spec:
containers:
- name: posts-api
image: kimgysen/posts-api:latest
ports:
- containerPort: 8083
livenessProbe:
httpGet:
path: /api/v1/posts/health
port: 8083
initialDelaySeconds: 120
timeoutSeconds: 1
在Pod上进行运行状况检查对于以下端点工作正常:/ api / v1 / posts / health
答案 0 :(得分:3)
我认为多次进入会花费更多(?)。
当我在入口资源中定义:-路径:/ api时,我在GET请求中收到404。
这意味着它将转到默认后端,可能是因为有此注释nginx.ingress.kubernetes.io/rewrite-target: /
。本质上,这是从要发送到后端的请求中剥离/api
。如果要保留路径,建议您删除注释。
您始终可以使用以下方法检查nginx入口控制器nginx.conf
文件:
$ kubectl cp <pod-where-nginx-controller-is-running>:nginx.conf .
$ cat nginx.conf
答案 1 :(得分:2)
您无需为Ingress资源支付费用,因为Ingress资源仅定义了路由规则。将所有路由定义放在一个Ingress文件中,然后拆分为不同的Ingress文件,实际上只会导致应用相同的规则。查看入口ingress-nginx - create one ingress per host? Or combine many hosts into one ingress and reload?