POD IP 不是固定的,其根据所在宿主机的docker0网卡生成的,每次重启,更新,调度等情况IP都会改变,实际生产环境中,有两种访问,对集群内部的访问和集群外部的访问。

    1. // http://docs.kubernetes.org.cn/117.html
    2. [service 类型]
    3. ClusterIP 集群内部容器访问地址,会生成一个虚拟IP pod不在一个网段
    4. NodePort 宿主机上映射一个端口,供外部应用访问模式
    5. Headless CluserIP 无头模式,无serviceip,即把spec.clusterip设置为None
    6. LoadBalancer 外部负载均衡
    7. [Port类型]
    8. - NodePort , type=NodePort
    9. 指定暴露到宿主机的端口, 不指定的话会随机分配个, 分配的IPapiserver的配置文件中指定
    10. --service-node-port-range=30000-50000,表示只允许分配30000-50000之间的端口
    11. - Port, port: 80
    12. 集群容器需要通过nginx:80访问, 外部是无法访问
    13. - targetPort
    14. 容器本身暴露的端口,和dockerfile中的expose意思一样

    创建NodePort类型Service

    如果选择了“NodePort”,那么 Kubernetes master 会分配一个区域范围内,(默认是30000-32767),并且,每一个node,都会代理(proxy)这个端口到你的服务中,我们可以在spec.ports[*].nodePort 找到具体的值. Cluster service 的 IP 地址是虚拟的,因此,只能从node节点上使用该IP 地址访问应用。为了从集群外访问应用,K8S 提供了使用 node 节点的IP 地址访问应用的方式

    1. apiVersion: v1
    2. kind: Service
    3. matadata:
    4. name: string
    5. namespace: string
    6. labels:
    7. - name: string
    8. annotations:
    9. - name: string
    10. spec:
    11. selector: []
    12. type: string
    13. clusterIP: string
    14. sessionAffinity: string
    15. ports:
    16. - name: string
    17. protocol: string
    18. port: int
    19. targetPort: int
    20. nodePort: int
    21. status:
    22. loadBalancer:
    23. ingress:
    24. ip: string
    25. hostname: string

    k8s - Service 配置 - 图1