Ingress 以 clusterIP 类型公开服务

ccd*_*ccd 4 kubernetes kubernetes-ingress

是否可以通过 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
Run Code Online (Sandbox Code Playgroud)

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

Pat*_*k W 5

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

不过,要使 Ingress 正常工作,您至少需要一项向外部公开工作负载的服务,例如 nodePort 或 loadBalancer。您的入口控制器和集群的基础设施将决定您需要使用这两项服务中的哪一项。

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

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