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: v1
kind: Service
matadata:
name: string
namespace: string
labels:
- name: string
annotations:
- name: string
spec:
selector: []
type: string
clusterIP: string
sessionAffinity: string
ports:
- name: string
protocol: string
port: int
targetPort: int
nodePort: int
status:
loadBalancer:
ingress:
ip: string
hostname: string