zoukankan      html  css  js  c++  java
  • kubernets之服务发现

    一  服务与pod的发现

      1.1  服务发现pod是很显而易见的事情,通过简称pod的标签是否和服务的标签一致即可,但是pod是如何发现服务的呢?这个问题其实感觉比较多余,但是接下来你就可能不这么想了

      首先,众所周知,pod是有生命周期,并且受控于它的管控器(RC等),当节点从集群中离开,则管控器需要重新创建pod,此时RC和pod里面都无服务的信息,那么是如何发现服务的呢?

      1.2  一个简单的方法是通过环境变量的形式来发现服务,但是这种方式,只能是服务在pod之前创建,因为这样集群才能将服务的相关的信息以环境变量的形式写入进去

        我们先删除现有的pod,删除之后RC会感知到集群里面的pod数量不符合预期,于是会重新创建3个pod

    [root@node01 Chapter05]# k delete po --all
    pod "kubia-2z6kz" deleted
    pod "kubia-m79rd" deleted
    pod "kubia-trmbx" deleted
    
    [root@node01 Chapter05]# k get po
    NAME          READY   STATUS    RESTARTS   AGE
    kubia-44qx4   1/1     Running   0          63s
    kubia-665qt   1/1     Running   0          63s
    kubia-k9cw8   1/1     Running   0          63s

      

      1.3 之后查看任意的一个pod内部容器的环境变量可知

    [root@node01 Chapter05]# k exec kubia-k9cw8 -- env
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=kubia-k9cw8
    KUBERNETES_PORT_443_TCP_PROTO=tcp
    KUBIA_SERVICE_HOST=10.109.29.64
    KUBIA_SERVICE_PORT=80
    KUBIA_PORT_80_TCP=tcp://10.109.29.64:80
    KUBIA_PORT_80_TCP_ADDR=10.109.29.64
    KUBERNETES_SERVICE_PORT_HTTPS=443
    KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
    KUBIA_PORT=tcp://10.109.29.64:80
    KUBERNETES_SERVICE_PORT=443
    KUBERNETES_SERVICE_HOST=10.96.0.1
    KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
    KUBERNETES_PORT_443_TCP_PORT=443
    KUBIA_PORT_80_TCP_PROTO=tcp
    KUBIA_PORT_80_TCP_PORT=80
    KUBERNETES_PORT=tcp://10.96.0.1:443
    NPM_CONFIG_LOGLEVEL=info
    NODE_VERSION=7.9.0
    YARN_VERSION=0.22.0
    HOME=/root

      环境变量如红色字体标注出来一致,可以通过环境的变量的形式来发现服务的存在

      1.4 通过环境变量的形式发现服务总觉得有些不尽人意,何不尝试使用DNS的形式发现服务

    事实上,kubernets确实允许通过DNS的形式来访问服务,并且这种方式比环境变量的形式要优秀很多

      我们首先来看集群中运行DNS服务的在哪里

    [root@node01 Chapter05]# k get po --all-namespaces
    NAMESPACE     NAME                             READY   STATUS    RESTARTS   AGE
    default       kubia-44qx4                      1/1     Running   0          13m
    default       kubia-665qt                      1/1     Running   0          13m
    default       kubia-k9cw8                      1/1     Running   0          13m
    kube-system   coredns-fb8b8dccf-gfkss          1/1     Running   1          3d3h
    kube-system   coredns-fb8b8dccf-tjr6m          1/1     Running   1          3d3h
    kube-system   etcd-master                      1/1     Running   1          3d3h
    kube-system   kube-apiserver-master            1/1     Running   0          3d3h
    kube-system   kube-controller-manager-master   1/1     Running   1          3d3h
    kube-system   kube-flannel-ds-b95br            1/1     Running   0          3d2h
    kube-system   kube-flannel-ds-mwlgl            1/1     Running   0          3d3h
    kube-system   kube-flannel-ds-w4mvw            1/1     Running   0          3d2h
    kube-system   kube-proxy-2h9ck                 1/1     Running   0          3d3h
    kube-system   kube-proxy-qprh7                 1/1     Running   0          3d2h
    kube-system   kube-proxy-z6nwk                 1/1     Running   0          3d2h
    kube-system   kube-scheduler-master            1/1     Running   1          3d3h

     

     如红色字体显示,他在kube-system这个命名空间里,并且为所有的pod提供DNS服务那么他又是如何做到的呢,我们看下/etc/resolv.conf

    [root@node01 Chapter05]# k get po
    NAME          READY   STATUS    RESTARTS   AGE
    kubia-44qx4   1/1     Running   0          16m
    kubia-665qt   1/1     Running   0          16m
    kubia-k9cw8   1/1     Running   0          16m
    
    [root@node01 Chapter05]# k exec kubia-k9cw8 -- cat /etc/resolv.conf
    nameserver 10.96.0.10
    search default.svc.cluster.local svc.cluster.local cluster.local
    options ndots:5
    
    [root@node01 Chapter05]# k exec kubia-665qt -- cat /etc/resolv.conf
    nameserver 10.96.0.10
    search default.svc.cluster.local svc.cluster.local cluster.local
    options ndots:5
    
    [root@node01 Chapter05]# k exec kubia-44qx4 -- cat /etc/resolv.conf
    nameserver 10.96.0.10
    search default.svc.cluster.local svc.cluster.local cluster.local
    options ndots:5

    每个pod里面/etc/resolv.conf都已经有了相关的配置于是访问服务就变得更加简单了

      1.5  可以直接通过DNS的形式进行访问

    root@kubia-44qx4:/# curl -s http://kubia.default.svc.cluster.local
    You've hit kubia-k9cw8

    root@kubia-44qx4:/# curl -s http://kubia.default You've hit kubia-665qt

    root@kubia-44qx4:/# curl -s http://kubia You've hit kubia-k9cw8

    注意:.svc.cluster.local这个是集群设置的,如果在相同的命名空间里面甚至可以直接用svc的名称加端口号访问

    在不同的命令空间的svc只需要添加服务名称加命名空间和端口号(在同一个集群)

  • 相关阅读:
    解决VS2013中的控制台一闪而过的问题
    无法查找或打开 PDB 文件解决办法
    一些课题
    KVM下raw和qcow2格式磁盘文件IO测试
    CentOS6.5下安装jdk配置环境变量错误问题:
    小代码训练
    tomcat启动一闪而过处理
    Tomcat 中get请求中含有中文字符时乱码的处理
    ssm框架错误展示-1
    a标签指定的url,在表单提交前进行js验证的实现
  • 原文地址:https://www.cnblogs.com/wxm-pythoncoder/p/14184114.html
Copyright © 2011-2022 走看看