kubernetes NodePort 与 ClusterIP 与 Nginx-Ingress

pot*_*ato 3 kubernetes

我已经有了自己的微服务,到目前为止,我已经通过 https 将服务以及 helm 图表公开type: NodePortnginx-ingress我自己的公共 IP;我注意到在我的微服务 helm 图表上运行 linter 时,它不安全(使用 NodePort),我应该使用 ClusterIP - 有人可以解释为什么吗?

Dav*_*aze 7

如果您的集群设置为可以从集群外部直接访问工作节点,那么您设置为 NodePort 类型服务的任何内容也都可以访问。特别是,这意味着http://any-node.k8s.example.com:32345/可以绕过您在入口层中设置的任何控制,到达您的后端服务。你通常不希望这样。

这里的一个合理方法(可能也是您的 linter 所鼓励的)是将 NodePort 或 LoadBalancer 类型的服务用于您的入口服务。其他任何东西都应该向该入口服务注册(使用本机 Kubernetes Ingress 对象或 Istio VirtualService 等),但具有用于集群内访问的 ClusterIP 类型服务。

     +------------+  NP  +---------+ CIP  +-------------+
---> | (any node) | ---> | ingress | ---> | application |
     +------------+      +---------+      +-------------+
                 |__________________________^
      a NodePort application service would allow this path
                   (bypassing the ingress)
Run Code Online (Sandbox Code Playgroud)