pod三种类型的网络

 Node Netwoek:    与外部网络接口
 Service Network: 出现在iptables或者ipadm中,仅仅做pods调度 
 Pod Network:       内部动态分配网络,如果发生故障 会自动重建 需要基于services通讯
 请求方式 service->pods    pods出现故障会自动重建,ip会发生改变  会自动重新到service中实现

service 是怎么实现识别后端的pods的

在Kubernetes中,Pods是有生命周期的。它们被创建、被终止,但不能被复活。在Kubernetes中通过ReplicationControllers动态的创建和删除Pod。然后,每一个Pod都拥有自己的IP地址,但是这些IP地址随着时间会发生变化。这会导致一个问题:如果在Kubernetes集群中,前端的Pod需要调用后端的Pod的功能,那么这些前端的Pod如何发现和跟踪后端的Pod?

在Kubernetes中,Service是一个抽象的概念,它定义了Pod逻辑集合和访问这些Pod的策略。Service通过Label Selector选择Pod。例如,在后端运行着有3个副本的Pod,这些副本是可互相替换的,前端不需要关注使用那个副本。Service抽象就用来实现此解耦的能力的。对于 Kubernetes-native的应用,当Service中的Pod发生变化时,Kubernetes通过了Endpoints API类进行更新。对于non-native applications, Kubernetes 提供了virtual-IP-based桥,通过它重定向后端的Pod。在本文中,描述如何定义Service、发布Service和发现Serivce的整个过程。
     pod是动态的,随时可能发生故障,重建等。ip地址基本上都会发生改变,所有出现了service来接入客户端的请求,同时使用pods的控制器(Pod Controller)来进行pod的识别,但是service是怎么实现负载识别过滤 是当前后端pod的。
	 是通过标签来识别的(label,label selector)。
	 创建pod的时候,可以附加标签来实现区分各个pod

.

例如创建: test:testing,app:nginx,version=v1512等标签

标签选择器

定义标签选择器的方式

pod标签的使用和命名方式

之前创建过的pod,查看pod的标签
	[root@k8s-master01 ~]# kubectl  get  pods/nginx-7db9fccd9b-dq9wz  --show-labels

添加新的标签
[root@k8s-master01 ~]# kubectl  get pods -n prod --show-labels
   NAME        READY   STATUS    RESTARTS   AGE    LABELS
   pod-demo1   1/1     Running   0          2d4h   <none>
例如我在创建一个pod-demo3,添加标签为:
	[root@k8s-master01 ~]# cat nginx_pods.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo3
      namespace:  prod
      labels:
        app: nginx
        rel: stable
        version: v11512
         
    spec:
      containers:
      - image: nginx
        imagePullPolicy: IfNotPresent
        name: nginx-3
        ports:
        - protocol: TCP
          containerPort: 80
          hostPort: 8888
          name: http-nginx
          hostIP: 192.168.1.101
 [root@k8s-master01 ~]# kubectl  apply -f nginx_pods.yaml 
    pod/pod-demo3 created
[root@k8s-master01 ~]# kubectl  get pods -n prod --show-labels -o wide
       NAME        READY   STATUS              RESTARTS   AGE    IP            NODE            NOMINATED NODE   READINESS GATES   LABELS
       pod-demo1   1/1     Running             0          2d4h   172.17.77.4   192.168.1.29    <none>           <none>            <none>
       pod-demo3   0/1     ContainerCreating   0          10s    <none>        192.168.1.73    <none>           <none>            app=nginx,rel=stable,version=v11512
也可以使用label直接管理各个pod的label
        [root@k8s-master01 ~]# kubectl  label -h		 来查看使用方式
给pod-demo1来添加一个status=healthy
 [root@k8s-master01 ~]# kubectl  label pods/pod-demo1  status=healthy -n prod
    pod/pod-demo1 labeled
 [root@k8s-master01 ~]# kubectl  get pods -n prod --show-labels -o wide
      NAME        READY   STATUS              RESTARTS   AGE     IP            NODE            NOMINATED NODE   READINESS GATES   LABELS
      pod-demo1   1/1     Running             0          2d4h    172.17.77.4   192.168.1.29    <none>           <none>            status=healthy
      pod-demo3   0/1     ContainerCreating   0          4m44s   <none>        192.168.1.73    <none>           <none>            app=nginx,rel=stable,version=v11512
修改label的话 需要添加--overwrite参数
   [root@k8s-master01 ~]# kubectl  label pods/pod-demo1 --overwrite  status=unhealthy -n prod
       pod/pod-demo1 labeled
   [root@k8s-master01 ~]# kubectl  get pods -n prod --show-labels -o wide
        NAME        READY   STATUS              RESTARTS   AGE     IP            NODE            NOMINATED NODE   READINESS GATES   LABELS
        pod-demo1   1/1     Running             0          2d4h    172.17.77.4   192.168.1.29    <none>           <none>            status=unhealthy
删除label
  [root@k8s-master01 ~]# kubectl  label pods/pod-demo1   status- -n prod 
建立多个label的时候  需要多个标签空格隔开
  [root@k8s-master01 ~]# kubectl  label pods/pod-demo1   status=healthy rel=stated verson=v11512 -n prod
 按照指定label查询pod
     -L, --label-columns=[]: Accepts a comma separated list of labels that are going to be presented as columns. Names are case-sensitive. You can also use multiple flag options like -L label1 -L label2...
     -l, --selector='': Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)		 

上述可以看出 -L 是针对label显示 -l是针对指定key:value显示
  显示status不等于healthy的

.
 显示status等于healthy的

.
显示rel包含(stated,stable)

.
显示rel不包含(stable)

.
显示只要有rel键的   或者 去没有rel键的(此处需要使用''单引号   !对于shell有特殊意义 此处需要弱引用)

.
组合显示包含(stated,stable) 和rel的键值