【问题标题】:Kubernetes ingress-nginx call service from non-default namespaceKubernetes ingress-nginx 从非默认命名空间调用服务
【发布时间】:2019-07-09 08:25:24
【问题描述】:

我的入口中有 3 个服务,前 2 个使用 default 命名空间。第三个服务是 prometheus-server 服务,其命名空间为ingress-nginx。 现在,我想将我的 prometheus DNS 映射到该服务,但由于 ingress 在 default 命名空间中找不到 prometheus 服务而出错。

如何处理 ingress 定义中的非默认命名空间?

【问题讨论】:

    标签: docker kubernetes prometheus nginx-ingress


    【解决方案1】:

    您可能希望在命名空间 ingress-nginx 中创建一个新的 Ingress,它将您的 DNS 路由到该服务。例如:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: example
      namespace: ingress-nginx
    spec:
      rules:  
      - host: your.domain.com
        http:
          paths:
          - path: /
            backend:
              serviceName: prometheus-server
              servicePort: 80
    

    【讨论】:

    • 一个节点有2个入口可以吗?
    • 是的,没关系。我的集群上有多个入口。
    • 但是,我只有一个工作节点,第二个入口也将部署在该节点上。
    • 请注意,入口与入口控制器不同。它只是一个配置,而不是一个工作的 pod。
    • 好吧,让我试试。而对于prometheus-server,我应该把serviceType从NodePort改成ClusterIP,对吗?
    【解决方案2】:

    您需要在另一个命名空间中引用您的服务及其完整路径,即prometheus-server.ingress-nginx.svc.cluster.local

    您不需要第二个 Ingress 来执行此操作。

    【讨论】:

    • 我能问一下为什么第二次进入要花钱吗?它不是一个正在运行的 pod,它只是一个配置。据我了解,只有一个入口控制器在运行。
    • Ingress 倾向于分配外部资源,例如HTTP Load Balancer on Google Cloud。拥有其中 1 个就够麻烦了,无法想象拥有 2 个。
    • Ingress 不同于 Ingress-controller(或 HTTP 负载均衡器)。可能有一个设置只有一个入口控制器(HTTP 负载平衡器),但每个命名空间都有一个入口。这样可以更好地分离不同的命名空间,以便更好地进行管理。
    • 实际上,您可以拥有任意数量的入口对象(即使在同一个命名空间中)。它们都将由入口控制器组合在一个配置中。如果您有多个不同类型的入口控制器(nginx、traefik、...),它们中的每一个都会从所有命名空间中收集并组合特定类型的所有入口对象(在入口注释中提到)。
    • 感谢您提供的信息 - 多个 Ingress 对 OP 来说似乎有点矫枉过正,但如果人们希望每个命名空间等分开 Ingress,我可以看到它对于其他托管场景来说是一个有用的第二个答案。
    猜你喜欢
    • 2019-03-30
    • 2018-08-05
    • 2018-02-20
    • 2012-11-30
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 2019-05-15
    • 2021-11-26
    相关资源
    最近更新 更多