入口多路径与多个入口

时间:2019-01-21 22:02:43

标签: kubernetes

我有以下适用的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

2 个答案:

答案 0 :(得分:3)

  

我认为多次进入会花费更多(?)。

  • nginx-ingress这样的多个入口控制器:是的,如果您使用外部load balancer和诸如AWS,GCP或Azure的云提供商,则会花费更多,因为您将使用与入口控制器。如果仅使用ClusterIP(在群集内访问),则不会花费更多;如果使用NodePort服务来公开它,则费用会有所不同。
  • 多个Ingress Kubernetes资源:不,如果您使用相同的入口控制器,它不会花费更多。
  

当我在入口资源中定义:-路径:/ 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?