【问题标题】:Ingress expose the service with the type clusterIPIngress 使用 clusterIP 类型公开服务
【发布时间】:2020-02-05 21:57:04
【问题描述】:

ClusterIP 类型的 Ingress 是否可以暴露服务?

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-service
  ports:
  - name: my-service-port
    port: 4001
    targetPort: 4001
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: my.example.com
      http:
        paths:
        - path: /my-service
          backend:
            serviceName: my-service
            servicePort: 4001

我知道服务可以通过 NodePort 的类型公开,但如果有人可以告诉我什么是从云中的互联网世界检测内部服务的最快方法,它可能会花费更多的 NAT 连接。

【问题讨论】:

  • 你能告诉你什么对你有用吗?一样的需要。我有一个用于 snmp 流量的 clusterIp 和一个用于来自外部的 http 流量的 Ingress 和服务,但邮递员以某种方式抛出错误“503 服务暂时不可用”
  • 可能发生的原因之一是Service和Ingress的规则不一样,详情见stackoverflow.com/a/63355114/9768260

标签: kubernetes kubernetes-ingress


【解决方案1】:

不,clusterIP 只能从集群内访问。 Ingress 本质上只是一组第 7 层转发规则,它不处理第 4 层将集群内部暴露给外界的要求。至少需要 1 个 NAT 步骤。

但是,要使 Ingress 正常工作,您至少需要涉及一项服务,将您的工作负载暴露在外部,例如 nodePort 或 loadBalancer。您的入口控制器和集群的基础架构将决定您需要使用这两种服务中的哪一种。

在 Nginx 入口的情况下,您需要有一个 LoadBalancer 服务,入口将使用该服务将流量从集群外部桥接到集群内部。之后,您可以为每个工作负载使用 clusterIP 服务。

在您上面的示例中,只要正确配置了 nginx 入口控制器(使用负载均衡器),那么您使用的配置应该可以正常工作。

【讨论】:

    【解决方案2】:

    简而言之:是的

    现在是详细的答案...

    首先,让我们看看official documentation 是怎么说的:

    Ingress 将来自集群外部的 HTTP 和 HTTPS 路由暴露给集群内的服务。
    [...]
    Ingress 控制器负责实现 Ingress,通常使用负载均衡器...

    这里令人困惑的是术语负载平衡器。在上面的定义中,我们说的是web负载均衡器中的经典和众所周知的。
    这个和kubernetes无关!

    回到定义,要使用Ingress 并使其工作,我们需要一个名为IngressController 的kubernetes 资源。而这个资源恰好是一个负载均衡器!就是这样。

    但是,您必须记住,外部世界中的负载均衡器type:LoadBalancer 类型的 kubernetes 服务之间存在区别。 p>

    总之(并且为了将来自外部世界的流量重定向到您的k8s clusterIp服务)

    • 您是否需要负载均衡器才能使您的kind:Ingress 正常工作?是的,这是kind:IngressController kubernetes 资源。
    • 您是否需要 kubernetes 服务 type:LoadBalancertype:NodePort 才能使您的 kind:Ingress 正常工作?绝对没有!服务type:ClusterIP 工作得很好!

    【讨论】:

      猜你喜欢
      • 2021-11-04
      • 1970-01-01
      • 2016-09-14
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2021-04-27
      • 2021-09-01
      相关资源
      最近更新 更多