service 通过 selector 来选择指定 label 的 pod。
如何访问 service 呢?集群内部访问,使用 cluster ip;集群外部访问,使用 NodePort。
cluster ip 是虚拟地址,只有加上端口,才能访问,通过域名映射到 cluster ip,域名即服务名称。而采用 NodePort,是在 node 节点上监听一个端口。
如果从 pod 中访问 service,kube-proxy 负责把 cluster ip 负载到不同的 pod 中。
ingress controller 作为一个入口暴露给外部,实现 7 层负载均衡,根据域名转发,跳过 kube-proxy 的转发,因为对外开放,所以要绑定 node 的物理端口。
从 service name 到 clusterIP + port,从 clusterIP + port 到后面对应的 pod。
pod 默认由 master 统一调度分配到不同 node,也可以为 pod 指定 nodename,或者使用 nodeslector(需要为 node 打标签),把 pod 调度到指定的 node 上。