http://docs.kubernetes.org.cn/643.html
Kubernetes集群里有三种IP地址,分别如下:
- Node IP:Node 节点的IP地址,即物理网卡的IP地址。
- Pod IP:Pod 的IP地址,即 docker 容器的IP地址,此为虚拟IP地址。
- Cluster IP:Service 的IP地址,此为虚拟IP地址。
K8s Service type:
ClusterIP : 默认值,k8s系统给service自动分配的虚拟IP,只能在集群内部访问。
详情:集群内部虚拟ip,只能内部访问,外部无法访问。常常与Ingress连用
**
NodePort : 会在宿主机上映射一个端口,供外部应用访问模式。 (使用宿主机的端口映射)
详情:
1. 这种方法有许多缺点:1. 每个端口只能是一种服务1. 端口范围只能是 30000-32767
如果节点/VM 的 IP 地址发生变化,你需要能处理这种情况
基于以上原因,我不建议在生产环境上用这种方式暴露服务。如果你运行的服务不要求一直可用,或者对成本比较敏感,你可以使用这种方法。这样的应用的最佳例子是 demo 应用,或者某些临时应用。
LoadBalancer : 如果你想要直接暴露服务,这就是默认方式。
详情:所有通往你指定的端口的流量都会被转发到对应的服务。它没有过滤条件,没有路由等。这意味着你几乎可以发送任何种类的流量到该服务,像 HTTP,TCP,UDP,Websocket,gRPC 或其它任意种类。
这个方式的最大缺点是每一个用 LoadBalancer 暴露的服务都会有它自己的 IP 地址,每个用到的 LoadBalancer 都需要付费,这将是非常昂贵的。
ingress : Ingress 事实上不是一种服务类型。
详情:它处于多个服务的前端,扮演着“智能路由”或者集群入口的角色。
Ingress 可能是暴露服务的最强大方式,但同时也是最复杂的。Ingress 控制器有各种类型,包括 Google Cloud Load Balancer, Nginx,Contour,Istio,等等。它还有各种插件,比如 cert-manager[5],它可以为你的服务自动提供 SSL 证书。
如果你想要使用同一个 IP 暴露多个服务,这些服务都是使用相同的七层协议(典型如 HTTP),那么Ingress 就是最有用的。如果你使用本地的 GCP 集成,你只需要为一个负载均衡器付费,且由于 Ingress是“智能”的,你还可以获取各种开箱即用的特性(比如 SSL、认证、路由等等)。
