【问题标题】:Ingress multiple paths vs multiple ingresses入口多路径与多入口
【发布时间】:2019-01-22 15:58:20
【问题描述】:

我有以下运行良好的 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,但那将是 post-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

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    我假设多个入口会花费更多(?)。

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

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

    【讨论】:

      【解决方案2】:

      您无需为每个 Ingress 资源付费,因为 Ingress 资源只是定义了一个路由规则。将所有路由定义放在一个 Ingress 文件中并拆分为不同的 Ingress 文件实际上只会导致应用相同的规则。查看入口ingress-nginx - create one ingress per host? Or combine many hosts into one ingress and reload?

      【讨论】:

      • 我同意 Rico 的所有观点,只是认为这将有助于使这一点更加明确。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      相关资源
      最近更新 更多