首页 > 解决方案 > Ingress 使用 clusterIP 类型公开服务

问题描述

是否可以通过具有 ClusterIP 类型的入口来公开服务?

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 连接。

标签: kuberneteskubernetes-ingress

解决方案


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

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

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

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


推荐阅读