POD IP 不是固定的,其根据所在宿主机的docker0网卡生成的,每次重启,更新,调度等情况IP都会改变,实际生产环境中,有两种访问,对集群内部的访问和集群外部的访问。
// http://docs.kubernetes.org.cn/117.html[service 类型]:ClusterIP 集群内部容器访问地址,会生成一个虚拟IP 与pod不在一个网段:NodePort 宿主机上映射一个端口,供外部应用访问模式:Headless CluserIP 无头模式,无serviceip,即把spec.clusterip设置为None:LoadBalancer 外部负载均衡[Port类型]- NodePort , type=NodePort指定暴露到宿主机的端口, 不指定的话会随机分配个, 分配的IP在apiserver的配置文件中指定--service-node-port-range=30000-50000,表示只允许分配30000-50000之间的端口- Port, port: 80集群容器需要通过nginx:80访问, 外部是无法访问- targetPort容器本身暴露的端口,和dockerfile中的expose意思一样
创建NodePort类型Service
如果选择了“NodePort”,那么 Kubernetes master 会分配一个区域范围内,(默认是30000-32767),并且,每一个node,都会代理(proxy)这个端口到你的服务中,我们可以在spec.ports[*].nodePort 找到具体的值. Cluster service 的 IP 地址是虚拟的,因此,只能从node节点上使用该IP 地址访问应用。为了从集群外访问应用,K8S 提供了使用 node 节点的IP 地址访问应用的方式
apiVersion: v1kind: Servicematadata:name: stringnamespace: stringlabels:- name: stringannotations:- name: stringspec:selector: []type: stringclusterIP: stringsessionAffinity: stringports:- name: stringprotocol: stringport: inttargetPort: intnodePort: intstatus:loadBalancer:ingress:ip: stringhostname: string

