代码之家  ›  专栏  ›  技术社区  ›  Trace

入口多路径对多入口

  •  2
  • Trace  · 技术社区  · 5 年前

    我有下面的入口定义,很好地工作(我使用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微服务。

    我想到的选择是:

    • 多入口
    • 不同路径的单一入口
    • 具有不同子域的单一入口(在云上时)

    我想多个入口会花费更多(?).
    出于某种原因,我在使用子路径段(入口nginx)时遇到问题。

    当我定义: - path: /api 在入口资源中,我收到一个404 on get请求。
    不清楚如何定义子路径(这里我使用/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 回复  |  直到 5 年前
        1
  •  2
  •   Rico    5 年前

    我想多个入口会花费更多(?).

    • 多个入口控制器,如 nginx-ingress :是的,如果您使用外部 load balancer 以及像AWS、GCP或Azure这样的云提供商,因为您将使用和入口控制器一样多的负载均衡器。如果只使用一个集群(在集群中访问),成本不会更高;如果使用 NodePort 服务来公开它。
    • 倍数 Ingress Kubernetes资源:不,如果使用相同的入口控制器,成本不会更高。

    当我在入口资源中定义-path:/api时,我收到一个404 on get请求。

    这意味着它将进入默认的后端,很可能是因为这个注释 nginx.ingress.kubernetes.io/rewrite-target: / . 从本质上讲,这是在剥离 /api 从你的请求到你的后端。如果要保留路径,我建议您删除注释。

    您可以随时检查nginx入口控制器 nginx.conf 文件内容如下:

    $ kubectl cp <pod-where-nginx-controller-is-running>:nginx.conf .
    $ cat nginx.conf
    
        2
  •  2
  •   Ryan Dawson    5 年前

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