zoukankan      html  css  js  c++  java
  • k8S 不同 port 解析

    apiVersion: v1
    kind: Service
    metadata:
     name: nginx-service
    spec:
     type: NodePort         // 有配置NodePort,外部流量可访问k8s中的服务
     ports:
     - port: 30080          // 服务访问端口,集群内部访问的端口
       targetPort: 80       // pod控制器中定义的端口(应用访问的端口)
       nodePort: 30001      // NodePort,外部客户端访问的端口
     selector:
      name: nginx-pod
    port
    port是k8s集群内部访问service的端口(service暴露在Cluster IP上的端口),即通过clusterIP: port可以访问到某个service
    
    nodePort
    nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort可以从外部访问到某个service。
    
    该端口号的范围是 kube-apiserver 的启动参数 –service-node-port-range指定的,在当前测试环境中其值是 30000-50000。表示只允许分配30000-50000之间的端口。
    
    比如外部用户要访问k8s集群中的一个Web应用,那么我们可以配置对应service的type=NodePort,nodePort=30001。其他用户就可以通过浏览器http://node:30001访问到该web服务。而数据库等服务可能不需要被外界访问,只需被内部服务访问即可,那么我们就不必设置service的NodePort
    
    TargetPort
    targetPort 是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器。
    
    containerPort
    containerPort是pod内部容器的端口,targetPort映射到containerPort。
    
    Endpoint
    创建Service的同时,会自动创建跟Service同名的Endpoints。
    
    Endpoint 是k8s集群中一个资源对象,存储在etcd里面,用来记录一个service对应的所有pod的访问地址。service通过selector和pod建立关联。
    
    Endpoint = Pod IP + Container Port
    
    service配置selector endpoint controller 才会自动创建对应的endpoint 对象,否则是不会生产endpoint 对象
    
    一个service由一组后端的pod组成,这些后端的pod通过service endpoint暴露出来,如果有一个新的pod创建创建出来,且pod的标签名称(label:pod)跟service里面的标签(label selector 的label)一致会自动加入到service的endpoints 里面,如果pod对象终止后,pod 会自动从edponts 中移除。在集群中任意节点 可以使用curl请求service <CLUSTER-IP>:<PORT>
    
    定义 Endpoint
    对于Service,我们还可以定义Endpoint,Endpoint 把Service和Pod动态地连接起来,Endpoint 的名称必须和服务的名称相匹配。
    
    创建mysql-service.yaml
    
    apiVersion: v1
    kind: Service
    metadata:
      name: mysql-production
    spec:
      ports:
        - port: 3306
    创建mysql-endpoints.yaml
    
    kind: Endpoints
    apiVersion: v1
    metadata:
      name: mysql-production
      namespace: default
    subsets:
      - addresses:
          - ip: 192.168.1.25
        ports:
          - port: 3306
    [root@k8s-master endpoint]# kubectl describe svc mysql-production
    Name:           mysql-production
    Namespace:      default
    Labels:         <none>
    Annotations:        <none>
    Selector:       <none>
    Type:           ClusterIP
    IP:         10.254.218.165
    Port:           <unset> 3306/TCP
    Endpoints:      192.168.1.25:3306
    Session Affinity:   None
    Events:         <none>
    

      

     

    作者:tigergao
    功不唐捐 玉汝于成
  • 相关阅读:
    ASP.NET MVC布局
    C#微信扫码支付Demo
    ASP.NET MVC用户登录(Memcache存储用户登录信息)
    Memcached分布式缓存快速入门
    Log4Net日志配置
    ASP.NET MVC自定义异常处理
    Spring.Net快速入门:控制翻转、依赖注入、面向切面编程
    C#微信公众号开发入门教程
    APS.NET MVC4生成解析二维码简单Demo
    Entity Framwork学习笔记
  • 原文地址:https://www.cnblogs.com/tigergaonotes/p/14746855.html
Copyright © 2011-2022 走看看