Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Kubernetes¼Ü¹¹Ñ§Ï°±Ê¼Ç
 
  5810  次浏览      28
 2018-5-8 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚÍøÂ磬ÎÄÕ½éÉÜÁË K8s»ù±¾¸ÅÄÅäÖÃTLSÖ¤Ê飬¸ß¿ÉÓ㬠ÈÝÆ÷ÍøÂçµÈ¹ØÓÚKubernetes¼Ü¹¹µÄ֪ʶ¡£

KubernetesÊÇGoogle¿ªÔ´µÄÈÝÆ÷¼¯Èº¹ÜÀíϵͳ£¬ÆäÌṩӦÓò¿Êð¡¢Î¬»¤¡¢ À©Õ¹»úÖÆµÈ¹¦ÄÜ£¬ÀûÓÃKubernetesÄÜ·½±ãµØ¹ÜÀí¿ç»úÆ÷ÔËÐÐÈÝÆ÷»¯µÄÓ¦Óã¬ÊÇDocker·Ö²¼Ê½ÏµÍ³µÄ½â¾ö·½°¸¡£k8sÀïËùÓеÄ×ÊÔ´¶¼¿ÉÒÔÓÃyaml»òJson¶¨Òå¡£

1 K8s»ù±¾¸ÅÄî

1.1 Master

Master½Úµã¸ºÔðÕû¸ö¼¯ÈºµÄ¿ØÖƺ͹ÜÀí£¬ËùÓеĿØÖÆÃüÁî¶¼ÊÇ·¢¸øËü£¬ÉÏÃæÔËÐÐ×ÅÒ»×鹨¼ü½ø³Ì£º

kube-apiserver£ºÌṩÁËHTTP REST½Ó¿Ú£¬ÊÇk8sËùÓÐ×ÊÔ´Ôöɾ¸Ä²éµÈ²Ù×÷µÄΨһÈë¿Ú£¬Ò²ÊǼ¯Èº¿ØÖƵÄÈë¿Ú¡£

kube-controller-manager£ºËùÓÐ×ÊÔ´µÄ×Ô¶¯»¯¿ØÖÆÖÐÐÄ¡£µ±¼¯Èº×´Ì¬ÓëÆÚÍû²»Í¬Ê±£¬kcm»áŬÁ¦Èü¯Èº»Ö¸´ÆÚÍû״̬£¬±ÈÈ磺µ±Ò»¸öpodËÀµô£¬kcm»áŬÁ¦Ð½¨Ò»¸öpodÀ´»Ö¸´¶ÔÓ¦replicas setÆÚÍûµÄ״̬¡£

kube-scheduler£º¸ºÔðPodµÄµ÷¶È¡£

ʵ¼ÊÉÏ£¬MasterÖ»ÊÇÒ»¸öÃûÒåÉϵĸÅÄÈý¸ö¹Ø¼üµÄ·þÎñ²»Ò»¶¨ÐèÒªÔËÐÐÔÚÒ»¸ö½ÚµãÉÏ¡£

1.1.1 API ServerµÄÔ­Àí

¼¯ÈºÖеĸ÷¸ö¹¦ÄÜÄ£¿éͨ¹ý apiserver½«ÐÅÏ¢´æ´¢ÔÚEtcd£¬µ±ÐèÒªÐÞ¸ÄÕâЩÐÅÏ¢µÄʱºòͨ¹ýÆäREST½Ó¿ÚÀ´ÊµÏÖ¡£

1.1.2 Controller ManagerµÄÔ­Àí

ÄÚ²¿°üº¬£º

Replication Controller

Node Controller

ResourceQuota Controller

Namespace Controller

ServiceAccount Controller

Token Controller

Service Controller

Endpoint ControllerµÈ

ÕâЩControllerͨ¹ýAPI Serverʵʱ¼à¿Ø¸÷¸ö×ÊÔ´µÄ״̬£¬µ±ÓÐ×ÊÔ´ÒòΪ¹ÊÕϵ¼ÖÂ״̬±ä»¯£¬Controller¾Í»á³¢ÊÔ½«ÏµÍ³ÓÉ¡°ÏÖÓÐ״̬¡±»Ö¸´µ½¡°ÆÚ´ý״̬¡±¡£

1.1.3 SchedulerµÄÔ­Àí

×÷ÓÃÊǽ«apiserver»òcontroller manager´´½¨µÄPodµ÷¶ÈºÍ°ó¶¨µ½¾ßÌåµÄNodeÉÏ£¬Ò»µ©°ó¶¨£¬¾ÍÓÉNodeÉϵÄkubelet½ÓÊÖPodµÄ½ÓÏÂÀ´µÄÉúÃüÖÜÆÚ¹ÜÀí¡£

1.2 Node

NodeÊǹ¤×÷¸ºÔؽڵ㣬ÔËÐÐ×ÅMaster·ÖÅäµÄ¸ºÔØ£¨Pod£©£¬µ«Ò»¸öNodeå´»úʱ£¬ÆäÉϵĸºÔػᱻ×Ô¶¯×ªÒƵ½ÆäËûNodeÉÏ¡£ÆäÉÏÔËÐеĹؼü×é¼þÊÇ£º

kubelet£º¸ºÔðPodµÄÉúÃüÖÜÆÚ¹ÜÀí£¬Í¬Ê±ÓëMasterÃÜÇÐЭ×÷£¬ÊµÏÖ¼¯Èº¹ÜÀíµÄ»ù±¾¹¦ÄÜ¡£

kube-proxy£ºÊµÏÖServiceµÄͨÐÅÓë¸ºÔØ¾ùºâ»úÖÆµÄÖØÒª×é¼þ£¬Àϰ汾Ö÷Ҫͨ¹ýÉèÖÃiptables¹æÔòʵÏÖ£¬Ð°æ1.9»ùÓÚkube-proxy-lvs ʵÏÖ¡£

Docker Engine£ºDockerÒýÇæ£¬¸ºÔðDockerµÄÉúÃüÖÜÆÚ¹ÜÀí¡£

1.2.1 kube-proxyµÄÔ­Àí

ÿ¸öNodeÉ϶¼ÔËÐÐ×ÅÒ»¸ökube-proxy½ø³Ì£¬ËüÔÚ±¾µØ½¨Á¢Ò»¸öSocketServer½ÓÊÕºÍת·¢ÇëÇ󣬿ÉÒÔ¿´×÷ÊÇServiceµÄ͸Ã÷´úÀíºÍ¸ºÔؾùºâÆ÷£¬¸ºÔؾùºâ²ßÂÔģʽÊÇRound Robin¡£Ò²¿ÉÒÔÉèÖûỰ±£³Ö£¬²ßÂÔʹÓõÄÊÇ¡°ClientIP¡±£¬½«Í¬Ò»¸öClientIPµÄÇëÇóת·¢Í¬Ò»¸öEndpointÉÏ¡£

ServiceµÄCluster IPºÍNodePortµÈ¸ÅÄî¶¼ÊÇkube-proxy·þÎñͨ¹ýIptablesµÄNATת»»ÊµÏÖ£¬Iptables»úÖÆÕë¶ÔµÄÊÇkube-proxy¼àÌýµÄ¶Ë¿Ú£¬ËùÒÔÿ¸öNodeÉ϶¼ÒªÓÐkube-proxy¡£

1.2.2 kubeletÔ­Àí

ÿ¸öNode¶¼»áÆô¶¯Ò»¸ökubelet£¬Ö÷Òª×÷ÓÃÓУº

£¨1£©Node¹ÜÀí

×¢²á½ÚµãÐÅÏ¢£»

ͨ¹ýcAdvisor¼à¿ØÈÝÆ÷ºÍ½ÚµãµÄ×ÊÔ´£»

¶¨ÆÚÏòMaster£¨Êµ¼ÊÉÏÊÇapiserver£©»ã±¨±¾½Úµã×ÊÔ´ÏûºÄÇé¿ö

£¨2£©Pod¹ÜÀí

ËùÒÔ·Çͨ¹ýapiserver·½Ê½´´½¨µÄPod½ÐStatic Pod£¬ÕâÀïÎÒÃÇÌÖÂ۵ͼÊÇͨ¹ýapiserver´´½¨µÄÆÕͨPod¡£kubeletͨ¹ýapiserver¼àÌýetcd£¬ËùÓÐÕë¶ÔPodµÄ²Ù×÷¶¼»á±»¼àÌýµ½£¬Èç¹ûÆäÖÐÓÐÉæ¼°µ½±¾½ÚµãµÄPod£¬Ôò°´ÕÕÒªÇó½øÐд´½¨¡¢Ð޸ġ¢É¾³ýµÈ²Ù×÷¡£

£¨3£©ÈÝÆ÷½¡¿µ¼ì²é

kubeletͨ¹ýÁ½Àà̽Õë¼ì²éÈÝÆ÷µÄ״̬£º

LivenessProbe£ºÅжÏÒ»¸öÈÝÆ÷ÊÇ·ñ½¡¿µ£¬Èç¹û²»½¡¿µÔò»áɾ³ýÕâ¸öÈÝÆ÷£¬²¢°´ÕÕrestartPolicy¿´ÊÇ·ñÖØÆôÕâ¸öÈÝÆ÷¡£ÊµÏֵķ½Ê½ÓÐExecAction£¨ÔÚÈÝÆ÷ÄÚ²¿Ö´ÐÐÒ»¸öÃüÁ¡¢TCPSocketAction£¨Èç¹û¶Ë¿Ú¿ÉÒÔ±»·ÃÎÊ£¬Ôò½¡¿µ£©¡¢HttpGetAction£¨Èç¹û·µ»Ø200Ôò½¡¿µ£©¡£

ReadinessProbe£ºÓÃÓÚÅжÏÈÝÆ÷ÊÇ·ñÆô¶¯ÍêÈ«¡£Èç¹û·µ»ØµÄÊÇʧ°Ü£¬ÔòEndpoint Controller»á½«Õâ¸öPodµÄEndpoint´ÓServiceµÄEndpointÁбíÖÐɾ³ý¡£Ò²¾ÍÊÇ£¬²»»áÓÐÇëÇóת·¢¸øËü¡£

1.3 Pod

PodÊÇk8s½øÐÐ×ÊÔ´µ÷¶ÈµÄ×îСµ¥Î»£¬Ã¿¸öPodÖÐÔËÐÐ×ÅÒ»¸ö»ò¶à¸öÃÜÇÐÏà¹ØµÄÒµÎñÈÝÆ÷£¬ÕâЩҵÎñÈÝÆ÷¹²ÏíÕâ¸öPauseÈÝÆ÷µÄIPºÍVolume£¬ÎÒÃÇÒÔÕâ¸ö²»Ò×ËÀÍöµÄPauseÈÝÆ÷×÷ΪPodµÄ¸ùÈÝÆ÷£¬ÒÔËüµÄ״̬±íʾÕû¸öÈÝÆ÷×éµÄ״̬¡£Ò»¸öPodÒ»µ©±»´´½¨¾Í»á·Åµ½EtcdÖд洢£¬È»ºóÓÉMasterµ÷¶Èµ½Ò»¸öNode°ó¶¨£¬ÓÉÕâ¸öNodeÉϵÄKubelet½øÐÐʵÀý»¯¡£

ÿ¸öPod»á±»·ÖÅäÒ»¸öµ¥¶ÀµÄPod IP£¬Pod IP + ContainerPort ×é³ÉÁËÒ»¸öEndpoint¡£

1.4 Service

K8sÖÐÒ»¸öServiceÏ൱ÓÚÒ»¸ö΢·þÎñµÄ¸ÅÄһ¸öService¶ÔÓ¦ºó¶Ë¶à¸öPod¼ÆËãʵÀý£¬Ê¹ÓÃLabelSelector½«Ò»ÀàPod¶¼°ó¶¨µ½×Ô¼ºÉÏÀ´¡£Ò»°ã»¹»áÐèÒªÒ»¸öDeployment»òÕßRCÀ´°ïÖúÕâ¸öServiceÀ´±£Ö¤Õâ¸öServiceµÄ·þÎñÄÜÁ¦ºÍÖÊÁ¿¡£

1.4.1 kube-proxy¸ºÔؾùºâ

ÔËÐÐÔÚÿ¸öNodeÉϵÄkube-proxyÆäʵ¾ÍÊÇÒ»¸öÖÇÄܵÄÈí¼þ¸ºÔؾùºâÆ÷£¬Ëü¸ºÔؽ«·¢¸øServiceµÄÇëÇóת·¢µ½ºó¶Ë¶ÔÓ¦µÄPod£¬Ò²¾ÍÊÇ˵Ëü¸ºÔð»á»°±£³ÖºÍ¸ºÔð¾ùºâ¡£

1.4.2 Cluster IP

¸ºÔؾùºâµÄ»ù´¡ÊǸºÔؾùºâÆ÷Ҫά»¤Ò»¸öºó¶ËEndpointÁÐ±í£¬µ«ÊÇPodµÄEndpoint»áËæ×ÅPodµÄÏú»ÙºÍÖØ½¨¶ø¸Ä±ä£¬k8sʹÕâ¸öÎÊÌâ͸Ã÷»¯¡£Ò»µ©Service±»´´½¨£¬¾Í»áÁ¢¿Ì·ÖÅ䏸ËüÒ»¸öCluster IP£¬ÔÚServiceµÄÕû¸öÉúÃüÖÜÆÚÄÚ£¬Õâ¸öCluster IP²»»á¸Ä±ä¡£ÓÚÊÇ£¬·þÎñ·¢ÏÖµÄÎÊÌâÒ²½â¾öÁË£ºÖ»ÒªÓÃService NameºÍService Cluster IP×öÒ»¸öDNSÓòÃûÓ³Éä¾Í¿ÉÒÔÁË¡£

1.4.3 DNS

´ÓKubernetes 1.3¿ªÊ¼£¬DNSͨ¹ýʹÓòå¼þ¹ÜÀíϵͳcluster add-on£¬³ÉΪÁËÒ»¸öÄÚ½¨µÄ×ÔÆô¶¯·þÎñ¡£Kubernetes DNSÔÚKubernetes¼¯ÈºÉϵ÷¶ÈÁËÒ»¸öDNS PodºÍService£¬²¢ÅäÖÃkubelet£¬Ê¹Æä¸æËßÿ¸öÈÝÆ÷ʹÓÃDNS ServiceµÄIPÀ´½âÎöDNSÃû³Æ¡£

£¨1£©Service

¼¯ÈºÖж¨ÒåµÄÿ¸öService£¨°üÀ¨DNS ServiceËü×Ô¼º£©¶¼±»·ÖÅäÁËÒ»¸öDNSÃû³Æ¡£Ä¬Èϵģ¬PodµÄDNSËÑË÷ÁбíÖлá°üº¬Pod×Ô¼ºµÄÃüÃû¿Õ¼äºÍ¼¯ÈºµÄĬÈÏÓò£¬ÏÂÃæÎÒÃÇÓÃʾÀýÀ´½âÊÍÒÔÏ¡£ ¼ÙÉèÓÐÒ»¸öÃûΪfooµÄService£¬Î»ÓÚÃüÃû¿Õ¼äbarÖС£ÔËÐÐÔÚbarÃüÃû¿Õ¼äÖеÄPod¿ÉÒÔͨ¹ýDNS²éÕÒfoo¹Ø¼ü×ÖÀ´²éÕÒµ½Õâ¸ö·þÎñ£¬¶øÔËÐÐÔÚÃüÃû¿Õ¼äquuxÖеÄPod¿ÉÒÔͨ¹ý¹Ø¼ü×Öfoo.barÀ´²éÕÒµ½Õâ¸ö·þÎñ¡£

ÆÕͨ£¨·Çheadless£©µÄService¶¼±»·ÖÅäÁËÒ»¸öDNS¼Ç¼£¬¸Ã¼Ç¼µÄÃû³Æ¸ñʽΪmy-svc.my-namespace.svc.cluster.local£¬Í¨¹ý¸Ã¼Ç¼¿ÉÒÔ½âÎö³ö·þÎñµÄ¼¯ÈºIP¡£ Headless£¨Ã»Óм¯ÈºIP£©µÄServiceÒ²±»·ÖÅäÁËÒ»¸öDNS¼Ç¼£¬Ãû³Æ¸ñʽΪmy-svc.my-namespace.svc.cluster.local¡£ÓëÆÕͨService²»Í¬µÄÊÇ£¬Ëü»á½âÎö³öServiceÑ¡ÔñµÄPodµÄIPÁÐ±í¡£

£¨2£©Pod

PodÒ²¿ÉÒÔʹÓÃDNS·þÎñ¡£pod»á±»·ÖÅäÒ»¸öDNS¼Ç¼£¬Ãû³Æ¸ñʽΪpod-ip-address.my-namespace.pod.cluster.local¡£ ±ÈÈ磬һ¸öpod£¬ËüµÄIPµØÖ·Îª1.2.3.4£¬ÃüÃû¿Õ¼äΪdefault£¬DNSÃû³ÆÎªcluster.local£¬ÄÇôËüµÄ¼Ç¼¾ÍÊÇ£º1-2-3-4.default.pod.cluster.local¡£ µ±pod±»´´½¨Ê±£¬ËüµÄhostnameÉèÖÃÔÚPodµÄmetadata.nameÖС£ÔÚv1.2°æ±¾ÖУ¬Óû§¿ÉÒÔÖ¸¶¨Ò»¸öPod×¢½â£¬pod.beta.kubernetes.io / hostname £¬ÓÃÓÚÖ¸¶¨ PodµÄhostname¡£Õâ¸öPod×¢½â£¬Ò»µ©±»Ö¸¶¨£¬¾Í½«ÓÅÏÈÓÚPodµÄÃû³Æ£¬³ÉΪpodµÄ hostname¡£±ÈÈ磬һ¸öPod£¬Æä×¢½âΪ pod .beta . kubernetes .io / hostname : my- pod -name£¬ÄÇô¸Ã PodµÄhostname»á±»ÉèÖÃΪmy -pod -name¡£ v1.2Öл¹ÒýÈëÁËÒ»¸öbetaÌØÐÔ£¬Óû§Ö¸¶¨Pod×¢½â£¬pod.beta .kubernetes.io /subdomain£¬À´Ö¸¶¨PodµÄ subdomain¡£±ÈÈ磬һ¸öPod£¬Æä hostname×¢½âÉèÖÃΪ¡°foo¡±£¬subdomain ×¢½âΪ¡°bar¡±£¬ÃüÃû¿Õ¼äΪ¡°my-namespace¡±£¬ÄÇôËü×îÖÕµÄ FQDN ¾ÍÊÇ¡°foo.bar.my-namespace .svc.cluster .local¡±¡£ ÔÚv1.3°æ±¾ÖУ¬PodSpec ÓÐÁËhostname ºÍ subdomain ×ֶΣ¬ÓÃÓÚÖ¸¶¨PodµÄ hostname ºÍ subdomain¡£ËüµÄÓÅÏȼ¶Ôò¸ßÓÚÉÏÃæÌáµ½µÄ pod.beta.kubernetes.io /hostnameºÍpod.beta.kubernetes.io /subdomain¡£

1.4.4 Íⲿ·ÃÎÊServiceµÄÎÊÌâ

ÏÈÃ÷È·ÕâÑù¼¸¸öIP£º

Node IP£ºNodeÖ÷»úµÄIP£¬ÓëËüÊÇ·ñÊôÓÚK8sÎ޹ء£

Pod IP£ºÊÇDokcer Engineͨ¹ýdocker0ÍøÇŵÄIPµØÖ·¶Î½øÐзÖÅäµÄ£¬Í¨³£ÊÇÒ»¸öÐéÄâµÄ¶þ²ãÍøÂç¡£k8sÖÐÒ»¸öPod·ÃÎÊÁíÒ»¸öPod¾ÍÊÇͨ¹ýPod IP¡£

Cluster IP£º½öÓÃÓÚService¶ÔÏó£¬ÊôÓÚk8sµÄÄÚ²¿IP£¬Íâ½çÎÞ·¨Ö±½Ó·ÃÎÊ¡£

£¨1£©NodePort

ÔÚServiceµÄyamlÖж¨ÒåNodePort£¬k8sΪ¼¯ÈºÖÐÿ¸öNode¶¼Ôö¼Ó¶ÔÕâ¸ö¶Ë¿ÚµÄ¼àÌý£¬Ê¹ÓÃÕâÖÖ·½Ê½ÍùÍùÐèÒªÒ»¸ö¶ÀÁ¢Óëk8sÖ®ÍâµÄ¸ºÔؾùºâÆ÷×÷ΪÁ÷Á¿µÄÈë¿Ú¡£

£¨2£©Ê¹ÓÃExternal IP

ÔËÐÐHello WorldÓ¦ÓóÌÐòµÄÎå¸öʵÀý¡£

´´½¨Ò»¸ö±©Â¶ÍⲿIPµØÖ·µÄService¶ÔÏó¡£

ʹÓÃService¶ÔÏó·ÃÎÊÕýÔÚÔËÐеÄÓ¦ÓóÌÐò¡£

ʹÓÃdeployment´´½¨±©Â¶µÄService¶ÔÏó£º

~ kubectl expose deployment hello - world --type = LoadBalancer --name = my-service

ÏÔʾ¹ØÓÚServiceµÄÐÅÏ¢£º

~ kubectl get services my - service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-service 10.3.245.137 104.198.205.71 8080 / TCP 54s
~ kubectl describe services my-service
Name: my -service
Namespace: default
Labels: run=load -balancer-example
Selector : run =load-balancer-example
Type: LoadBalancer
IP: 10.3.245.137
LoadBalancer Ingress: 104.198.205.71
Port: <unset> 8080/TCP
NodePort: <unset> 32377/TCP
Endpoints: 10.0.0.6:8080 ,10.0.1.6:8080,10.0.1.7: 8080 + 2 more...
Session Affinity : None
Events:

ÔÚ´ËÀý×ÓÖУ¬ÍⲿIPµØÖ·Îª104.198.205.71¡£»¹Òª×¢ÒâPortµÄÖµ¡£ÔÚÕâ¸öÀý×ÓÖУ¬¶Ë¿ÚÊÇ8080¡£ÔÚÉÏÃæµÄÊä³öÖУ¬Äú¿ÉÒÔ¿´µ½¸Ã·þÎñÓжà¸ö¶Ëµã£º10.0.0.6:8080,10.0.1.6:8080,10.0.1.7:8080 + 2 more¡­¡£ÕâЩÊÇÔËÐÐHello WorldÓ¦ÓóÌÐòµÄpodµÄÄÚ²¿µØÖ·¡£

ʹÓÃÍⲿIPµØÖ··ÃÎÊHello WorldÓ¦ÓóÌÐò£º

~ curl http:// <external-ip>:<port>
Hello Kubernetes!

ɾ³ý·þÎñ

~ kubectl delete services my -service
~ kubectl delete deployment hello -world

1.5 Ingress

ͨ³£Çé¿öÏ£¬serviceºÍpod½ö¿ÉÔÚ¼¯ÈºÄÚ²¿ÍøÂçÖÐͨ¹ýIPµØÖ··ÃÎÊ¡£ËùÓе½´ï±ß½ç·ÓÉÆ÷µÄÁ÷Á¿»ò±»¶ªÆú»ò±»×ª·¢µ½ÆäËûµØ·½¡£IngressÊÇÊÚȨÈëÕ¾Á¬½Óµ½´ï¼¯Èº·þÎñµÄ¹æÔò¼¯ºÏ¡£Äã¿ÉÒÔ¸øIngressÅäÖÃÌṩÍⲿ¿É·ÃÎʵÄURL¡¢¸ºÔؾùºâ¡¢SSL¡¢»ùÓÚÃû³ÆµÄÐéÄâÖ÷»úµÈ¡£Óû§Í¨¹ýPOST Ingress×ÊÔ´µ½API serverµÄ·½Ê½À´ÇëÇóingress¡£ Ingress controller¸ºÔðʵÏÖIngress£¬Í¨³£Ê¹ÓøºÔØÆ½ºâÆ÷£¬Ëü»¹¿ÉÒÔÅäÖñ߽ç·ÓÉºÍÆäËûǰ¶Ë£¬ÕâÓÐÖúÓÚÒÔHA·½Ê½´¦ÀíÁ÷Á¿¡£

×î¼ò»¯µÄIngressÅäÖãº

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test - ingress
spec:
rules:
- http:
paths:
- path: / testpath
backend:
serviceName: test
servicePort: 80
- path: / bar
backend:
serviceName: s2
servicePort: 80

1-4ÐУº¸úKubernetesµÄÆäËûÅäÖÃÒ»Ñù£¬ingressµÄÅäÖÃÒ²ÐèÒªapiVersion£¬kindºÍmetadata×ֶΡ£ÅäÖÃÎļþµÄÏêϸ˵Ã÷Çë²é¿´²¿ÊðÓ¦ÓÃ, ÅäÖÃÈÝÆ÷ºÍ ʹÓÃresources.

5-7ÐÐ: Ingress spec Öаüº¬ÅäÖÃÒ»¸öloadbalancer»òproxy serverµÄËùÓÐÐÅÏ¢¡£×îÖØÒªµÄÊÇ£¬Ëü°üº¬ÁËÒ»¸öÆ¥ÅäËùÓÐÈëÕ¾ÇëÇóµÄ¹æÔòÁÐ±í¡£Ä¿Ç°ingressÖ»Ö§³Öhttp¹æÔò¡£

8-9ÐУºÃ¿Ìõhttp¹æÔò°üº¬ÒÔÏÂÐÅÏ¢£ºÒ»¸öhostÅäÖÃÏ±ÈÈçfor.bar.com£¬ÔÚÕâ¸öÀý×ÓÖÐĬÈÏÊÇ*£©£¬pathÁÐ±í£¨±ÈÈ磺/testpath£©£¬Ã¿¸öpath¶¼¹ØÁªÒ»¸öbackend(±ÈÈçtest:80)¡£ÔÚloadbalancer½«Á÷Á¿×ª·¢µ½backend֮ǰ£¬ËùÓеÄÈëÕ¾ÇëÇó¶¼ÒªÏÈÆ¥ÅähostºÍpath¡£

10-12ÐУºbackendÊÇÒ»¸öservice:portµÄ×éºÏ¡£IngressµÄÁ÷Á¿±»×ª·¢µ½ËüËùÆ¥ÅäµÄbackend¡£

ÅäÖÃTLSÖ¤Êé

Äã¿ÉÒÔͨ¹ýÖ¸¶¨°üº¬TLS˽ԿºÍÖ¤ÊéµÄsecretÀ´¼ÓÃÜIngress¡£ Ŀǰ£¬Ingress½öÖ§³Öµ¥¸öTLS¶Ë¿Ú443£¬²¢¼Ù¶¨TLS termination¡£ Èç¹ûIngressÖеÄTLSÅäÖò¿·ÖÖ¸¶¨Á˲»Í¬µÄÖ÷»ú£¬ÔòËüÃǽ«¸ù¾Ýͨ¹ýSNI TLSÀ©Õ¹Ö¸¶¨µÄÖ÷»úÃû£¨¼ÙÈçIngress controllerÖ§³ÖSNI£©ÔÚ¶à¸öÏàͬ¶Ë¿ÚÉϽøÐи´ÓᣠTLS secretÖбØÐë°üº¬ÃûΪtls.crtºÍtls.keyµÄÃÜÔ¿£¬ÕâÀïÃæ°üº¬ÁËÓÃÓÚTLSµÄÖ¤ÊéºÍ˽Կ£¬ÀýÈ磺

£¨1£©´´½¨Secret

apiVersion : v1
data:
tls.crt : base64 encoded cert
tls.key : base64 encoded key
kind : Secret
metadata:
name : testsecret
namespace : default
type: Opaque

£¨2£©´´½¨Ingress£º

apiVersion: extensions / v1beta1
kind: Ingress
metadata:
name: no -rules -map
spec:
tls:
- secretName : testsecret
backend:
serviceName: s1
servicePort: 80

2 ¸ß¿ÉÓÃ

Kubernetes·þÎñ±¾ÉíµÄÎȶ¨ÔËÐжԼ¯Èº¹ÜÀíÖÁ¹ØÖØÒª£¬Ó°Ïì·þÎñÎȶ¨µÄÒòËØÒ»°ãÀ´Ëµ·ÖΪÁ½ÖÖ,Ò»ÖÖÊÇ·þÎñ±¾ÉíÒì³£»òÕß·þÎñËùÔÚ»úÆ÷å´»ú£¬ÁíÒ»ÖÖÊÇÒòÎªÍøÂçÎÊÌâµ¼ÖµķþÎñ²»¿ÉÓᣱ¾ÎĽ«´Ó´æ´¢²ã¡¢¹ÜÀí²ã¡¢½ÓÈë²ãÈý¸ö·½Ãæ½éÉܸ߿ÉÓÃKubernetes¼¯ÈºµÄÔ­Àí¡£

2.1 Etcd¸ß¿ÉÓ÷½°¸

KubernetesµÄ´æ´¢²ãʹÓõÄÊÇEtcd¡£EtcdÊÇCoreOS¿ªÔ´µÄÒ»¸ö¸ß¿ÉÓÃǿһÖÂÐԵķֲ¼Ê½´æ´¢·þÎñ£¬KubernetesʹÓÃEtcd×÷ΪÊý¾Ý´æ´¢ºó¶Ë£¬°ÑÐèÒª¼Ç¼µÄpod¡¢rc¡¢serviceµÈ×ÊÔ´ÐÅÏ¢´æ´¢ÔÚEtcdÖС£

EtcdʹÓÃraftËã·¨½«Ò»×éÖ÷»ú×é³É¼¯Èº£¬raft ¼¯ÈºÖеÄÿ¸ö½Úµã¶¼¿ÉÒÔ¸ù¾Ý¼¯ÈºÔËÐеÄÇé¿öÔÚÈýÖÖ״̬¼äÇл»£ºfollower, candidate Óë leader¡£leader ºÍ follower Ö®¼ä±£³ÖÐÄÌø¡£Èç¹ûfollowerÔÚÒ»¶Îʱ¼äÄÚûÓÐÊÕµ½À´×ÔleaderµÄÐÄÌø£¬¾Í»áתΪcandidate£¬·¢³öеÄÑ¡Ö÷ÇëÇó¡£

¼¯Èº³õʼ»¯µÄʱºòÄÚ²¿µÄ½Úµã¶¼ÊÇfollower½Úµã£¬Ö®ºó»áÓÐÒ»¸ö½ÚµãÒòΪûÓÐÊÕµ½leaderµÄÐÄÌø×ªÎªcandidate½Úµã£¬·¢ÆðÑ¡Ö÷ÇëÇó¡£µ±Õâ¸ö½Úµã»ñµÃÁË´óÓÚÒ»°ë½ÚµãµÄͶƱºó»áתΪleader½Úµã¡£µ±leader½Úµã·þÎñÒì³£ºó£¬ÆäÖеÄij¸öfollower½ÚµãÒòΪûÓÐÊÕµ½leaderµÄÐÄÌø×ªÎªcandidate½Úµã£¬·¢ÆðÑ¡Ö÷ÇëÇó¡£Ö»Òª¼¯ÈºÖÐÊ£ÓàµÄÕý³£½ÚµãÊýÄ¿´óÓÚ¼¯ÈºÄÚÖ÷»úÊýÄ¿µÄÒ»°ë£¬Etcd¼¯Èº¾Í¿ÉÒÔÕý³£¶ÔÍâÌṩ·þÎñ¡£

µ±¼¯ÈºÄÚ²¿µÄÍøÂç³öÏÖ¹ÊÕϼ¯Èº¿ÉÄÜ»á³öÏÖ¡°ÄÔÁÑ¡±ÎÊÌ⣬Õâ¸öʱºò¼¯Èº»á·ÖΪһ´óһСÁ½¸ö¼¯Èº£¨ÆæÊý½ÚµãµÄ¼¯Èº£©£¬½ÏСµÄ¼¯Èº»á´¦ÓÚÒ쳣״̬£¬½Ï´óµÄ¼¯Èº¿ÉÒÔÕý³£¶ÔÍâÌṩ·þÎñ¡£

2.2 Master¸ß¿ÉÓ÷½°¸

MasterÉÏÓÐÈý¸ö¹Ø¼üµÄ·þÎñ£ºapiserver¡¢controller-managerºÍscheduler£¬ÕâÈý¸ö²»Ò»¶¨ÒªÔËÐÐÔÚһ̨Ö÷»úÉÏ¡£

2.2.1 controller-managerºÍschedulerµÄÑ¡¾ÙÅäÖÃ

KubernetesµÄ¹ÜÀí²ã·þÎñ°üÀ¨kube-schedulerºÍkube-controller-manager¡£kube-scheduerºÍkube-controller-managerʹÓÃÒ»Ö÷¶à´ÓµÄ¸ß¿ÉÓ÷½°¸£¬ÔÚͬһʱ¿ÌÖ»ÔÊÐíÒ»¸ö·þÎñ´¦ÒÔ¾ßÌåµÄÈÎÎñ¡£KubernetesÖÐʵÏÖÁËÒ»Ì×¼òµ¥µÄÑ¡Ö÷Âß¼­£¬ÒÀÀµEtcdʵÏÖschedulerºÍcontroller-managerµÄÑ¡Ö÷¹¦ÄÜ¡£

Èç¹ûschedulerºÍcontroller-managerÔÚÆô¶¯µÄʱºòÉèÖÃÁËleader-elect²ÎÊý£¬ËüÃÇÔÚÆô¶¯ºó»áÏȳ¢ÊÔ»ñÈ¡leader½ÚµãÉí·Ý£¬Ö»ÓÐÔÚ»ñÈ¡leader½ÚµãÉí·Ýºó²Å¿ÉÒÔÖ´ÐоßÌåµÄÒµÎñÂß¼­¡£ËüÃÇ·Ö±ð»áÔÚEtcdÖд´½¨kube-schedulerºÍkube-controller-managerµÄendpoint£¬endpointµÄÐÅÏ¢ÖмǼÁ˵±Ç°µÄleader½ÚµãÐÅÏ¢£¬ÒÔ¼°¼Ç¼µÄÉϴθüÐÂʱ¼ä¡£leader½Úµã»á¶¨ÆÚ¸üÐÂendpointµÄÐÅÏ¢£¬Î¬»¤×Ô¼ºµÄleaderÉí·Ý¡£Ã¿¸ö´Ó½ÚµãµÄ·þÎñ¶¼»á¶¨ÆÚ¼ì²éendpointµÄÐÅÏ¢£¬Èç¹ûendpointµÄÐÅÏ¢ÔÚʱ¼ä·¶Î§ÄÚûÓиüУ¬ËüÃǻ᳢ÊÔ¸üÐÂ×Ô¼ºÎªleader½Úµã¡£

scheduler·þÎñÒÔ¼°controller-manager·þÎñÖ®¼ä²»»á½øÐÐͨÐÅ£¬ÀûÓÃEtcdµÄǿһÖÂÐÔ£¬Äܹ»±£Ö¤ÔÚ·Ö²¼Ê½¸ß²¢·¢Çé¿öÏÂleader½ÚµãµÄÈ«¾ÖΨһÐÔ¡£ÕûÌå·½°¸ÈçÏÂͼËùʾ£º

µ±¼¯ÈºÖеÄleader½Úµã·þÎñÒì³£ºó£¬ÆäËü½ÚµãµÄ·þÎñ»á³¢ÊÔ¸üÐÂ×ÔÉíΪleader½Úµã£¬µ±Óжà¸ö½Úµãͬʱ¸üÐÂendpointʱ£¬ÓÉEtcd±£Ö¤Ö»ÓÐÒ»¸ö·þÎñµÄ¸üÐÂÇëÇóÄܹ»³É¹¦¡£Í¨¹ýÕâÖÖ»úÖÆshedulerºÍcontroller-manager¿ÉÒÔ±£Ö¤ÔÚleader½Úµãå´»úºóÆäËüµÄ½Úµã¿ÉÒÔ˳ÀûÑ¡Ö÷£¬±£Ö¤·þÎñ¹ÊÕϺó¿ìËÙ»Ö¸´¡£µ±¼¯ÈºÖеÄÍøÂç³öÏÖ¹ÊÕÏʱ¶Ô·þÎñµÄÑ¡Ö÷Ó°Ïì²»ÊǺܴó£¬ÒòΪschedulerºÍcontroller-managerÊÇÒÀÀµEtcd½øÐÐÑ¡Ö÷µÄ£¬ÔÚÍøÂç¹ÊÕϺ󣬿ÉÒÔºÍEtcdͨÐŵÄÖ÷»úÒÀÈ»¿ÉÒÔ°´ÕÕ֮ǰµÄÂß¼­½øÐÐÑ¡Ö÷£¬¾ÍË㼯Ⱥ±»Çз֣¬EtcdÒ²¿ÉÒÔ±£Ö¤Í¬Ò»Ê±¿ÌÖ»ÓÐÒ»¸ö½ÚµãµÄ·þÎñ´¦ÓÚleader״̬¡£

2.2.2 apiserverµÄ¸ß¿ÉÓÃ

KubernetesµÄ½ÓÈë²ã·þÎñÖ÷ÒªÊÇkube-apiserver¡£apiserver±¾ÉíÊÇÎÞ״̬µÄ·þÎñ£¬ËüµÄÖ÷ÒªÈÎÎñÖ°ÔðÊǰÑ×ÊÔ´Êý¾Ý´æ´¢µ½EtcdÖУ¬ºóÐø¾ßÌåµÄÒµÎñÂß¼­ÊÇÓÉschedulerºÍcontroller-managerÖ´Ðеġ£ËùÒÔ¿ÉÒÔͬʱÆð¶à¸öapiserver·þÎñ£¬Ê¹ÓÃnginx°Ñ¿Í»§¶ËµÄÁ÷Á¿×ª·¢µ½²»Í¬µÄºó¶ËapiserverÉÏʵÏÖ½ÓÈë²ãµÄ¸ß¿ÉÓ᣾ßÌåµÄʵÏÖÈçÏÂͼËùʾ£º

½ÓÈë²ãµÄ¸ß¿ÉÓ÷ÖΪÁ½¸ö²¿·Ö£¬Ò»¸ö²¿·ÖÊǶà»îµÄapiserver·þÎñ£¬ÁíÒ»¸ö²¿·ÖÊÇÒ»Ö÷Ò»±¸µÄnginx·þÎñ¡£

2.3 Keepalived¼ò½é

KeepalivedÈí¼þÆð³õÊÇרΪLVS¸ºÔؾùºâÈí¼þÉè¼ÆµÄ£¬ÓÃÀ´¹ÜÀí²¢¼à¿ØLVS¼¯ÈºÏµÍ³Öи÷¸ö·þÎñ½ÚµãµÄ״̬£¬ºóÀ´ÓÖ¼ÓÈëÁË¿ÉÒÔʵÏָ߿ÉÓõÄVRRP¹¦ÄÜ¡£Òò´Ë£¬Keepalived³ýÁËÄܹ»¹ÜÀíLVSÈí¼þÍ⣬»¹¿ÉÒÔ×÷ΪÆäËû·þÎñ£¨ÀýÈ磺Nginx¡¢Haproxy¡¢MySQLµÈ£©µÄ¸ß¿ÉÓýâ¾ö·½°¸Èí¼þ¡£KeepalivedÈí¼þÖ÷ÒªÊÇͨ¹ýVRRPЭÒéʵÏָ߿ÉÓù¦Äܵġ£VRRPÊÇVirtual Router RedundancyProtocol(ÐéÄâ·ÓÉÆ÷ÈßÓàЭÒ飩µÄËõд£¬VRRP³öÏÖµÄÄ¿µÄ¾ÍÊÇΪÁ˽â¾ö¾²Ì¬Â·Óɵ¥µã¹ÊÕÏÎÊÌâµÄ£¬ËüÄܹ»±£Ö¤µ±¸ö±ð½Úµãå´»úʱ£¬Õû¸öÍøÂç¿ÉÒÔ²»¼ä¶ÏµØÔËÐС£ËùÒÔ£¬Keepalived Ò»·½Ãæ¾ßÓÐÅäÖùÜÀíLVSµÄ¹¦ÄÜ£¬Í¬Ê±»¹¾ßÓжÔLVSÏÂÃæ½Úµã½øÐн¡¿µ¼ì²éµÄ¹¦ÄÜ£¬ÁíÒ»·½ÃæÒ²¿ÉʵÏÖÏµÍ³ÍøÂç·þÎñµÄ¸ß¿ÉÓù¦ÄÜ¡£

¹ÊÕÏÇл»×ªÒÆÔ­Àí

Keepalived¸ß¿ÉÓ÷þÎñ¶ÔÖ®¼äµÄ¹ÊÕÏÇл»×ªÒÆ£¬ÊÇͨ¹ý VRRP (Virtual Router Redundancy Protocol ,ÐéÄâ·ÓÉÆ÷ÈßÓàЭÒ飩À´ÊµÏֵġ£ÔÚ Keepalived·þÎñÕý³£¹¤×÷ʱ£¬Ö÷ Master½Úµã»á²»¶ÏµØÏò±¸½Úµã·¢ËÍ£¨¶à²¥µÄ·½Ê½£©ÐÄÌøÏûÏ¢£¬ÓÃÒÔ¸æËß±¸Backup½Úµã×Ô¼º»¹»î¿´£¬µ±Ö÷ Master½Úµã·¢Éú¹ÊÕÏʱ£¬¾ÍÎÞ·¨·¢ËÍÐÄÌøÏûÏ¢£¬±¸½ÚµãÒ²¾ÍÒò´ËÎÞ·¨¼ÌÐø¼ì²âµ½À´×ÔÖ÷ Master½ÚµãµÄÐÄÌøÁË£¬ÓÚÊǵ÷ÓÃ×ÔÉíµÄ½Ó¹Ü³ÌÐò£¬½Ó¹ÜÖ÷Master½ÚµãµÄ IP×ÊÔ´¼°·þÎñ¡£¶øµ±Ö÷ Master½Úµã»Ö¸´Ê±£¬±¸Backup½ÚµãÓÖ»áÊÍ·ÅÖ÷½Úµã¹ÊÕÏʱ×ÔÉí½Ó¹ÜµÄIP×ÊÔ´¼°·þÎñ£¬»Ö¸´µ½Ô­À´µÄ±¸ÓýÇÉ«¡£

3 ÈÝÆ÷ÍøÂç

3.1 dockerĬÈÏÈÝÆ÷ÍøÂç

ÔÚĬÈÏÇé¿öÏ»ῴµ½Èý¸öÍøÂ磬ËüÃÇÊÇDocker Deamon½ø³Ì´´½¨µÄ¡£ËüÃÇʵ¼ÊÉÏ·Ö±ð¶ÔÓ¦ÁËDocker¹ýÈ¥µÄÈýÖÖ¡ºÍøÂçģʽ¡»£¬¿ÉÒÔʹÓÃdocker network lsÀ´²é¿´£º

master@ubuntu:~$ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
18d934794c74 bridge bridge local
f7a7b763f013 host host local
697354257ae3 none null local

Õâ 3 ¸öÍøÂç°üº¬ÔÚ Docker ʵÏÖÖС£ÔËÐÐÒ»¸öÈÝÆ÷ʱ£¬¿ÉÒÔʹÓà the ¨Cnet±êÖ¾Ö¸¶¨ÄúÏ£ÍûÔÚÄĸöÍøÂçÉÏÔËÐиÃÈÝÆ÷¡£ÄúÈÔÈ»¿ÉÒÔʹÓÃÕâ 3 ¸öÍøÂç¡£

bridge ÍøÂç±íʾËùÓÐ Docker °²×°Öж¼´æÔÚµÄ docker0 ÍøÂç¡£³ý·ÇʹÓà docker run ¨Cnet=Ñ¡ÏîÁíÐÐÖ¸¶¨£¬·ñÔò Docker ÊØ»¤½ø³ÌĬÈÏÇé¿öÏ»ὫÈÝÆ÷Á¬½Óµ½´ËÍøÂç¡£ÔÚÖ÷»úÉÏʹÓà ifconfigÃüÁ¿ÉÒÔ¿´µ½´ËÍøÇÅÊÇÖ÷»úµÄÍøÂç¶ÑÕ»µÄÒ»²¿·Ö¡£

none ÍøÂçÔÚÒ»¸öÌØ¶¨ÓÚÈÝÆ÷µÄÍøÂç¶ÑÕ»ÉÏÌí¼ÓÁËÒ»¸öÈÝÆ÷¡£¸ÃÈÝÆ÷ȱÉÙÍøÂç½Ó¿Ú¡£

host ÍøÂçÔÚÖ÷»úÍøÂç¶ÑÕ»ÉÏÌí¼ÓÒ»¸öÈÝÆ÷¡£Äú¿ÉÒÔ·¢ÏÖ£¬ÈÝÆ÷ÖеÄÍøÂçÅäÖÃÓëÖ÷»úÏàͬ¡£

3.2 ¿çÖ÷»úͨÐŵķ½°¸

ºÍhost¹²Ïínetwork namespace

ÕâÖÖ½ÓÈëģʽÏ£¬²»»áΪÈÝÆ÷´´½¨ÍøÂçЭÒéÕ»£¬¼´ÈÝÆ÷ûÓжÀÁ¢ÓÚhostµÄnetwork namespace£¬µ«ÊÇÈÝÆ÷µÄÆäËûnamespace£¨ÈçIPC¡¢PID¡¢MountµÈ£©»¹ÊǺÍhostµÄnamespace¶ÀÁ¢µÄ¡£ÈÝÆ÷ÖеĽø³Ì´¦ÓÚhostµÄÍøÂç»·¾³ÖУ¬Óëhost¹²ÓÃL2-L4µÄÍøÂç×ÊÔ´¡£¸Ã·½Ê½µÄÓŵãÊÇ£¬ÈÝÆ÷Äܹ»Ö±½ÓʹÓÃhostµÄÍøÂç×ÊÔ´ÓëÍâ½ç½øÐÐͨÐÅ£¬Ã»ÓжîÍâµÄ¿ªÏú£¨ÈçNAT£©£¬È±µãÊÇÍøÂçµÄ¸ôÀëÐԲÈÝÆ÷ºÍhostËùʹÓõĶ˿ںž­³£»á·¢Éú³åÍ»¡£

ºÍhost¹²ÏíÎïÀíÍø¿¨

2Óë1µÄÇø±ðÔÚÓÚ£¬ÈÝÆ÷ºÍhost¹²ÏíÎïÀíÍø¿¨£¬µ«ÈÝÆ÷ÓµÓжÀÁ¢ÓÚhostµÄnetwork namespace£¬ÈÝÆ÷ÓÐ×Ô¼ºµÄMACµØÖ·¡¢IPµØÖ·¡¢¶Ë¿ÚºÅ¡£ÕâÖÖ½ÓÈ뷽ʽÖ÷ҪʹÓÃSR-IOV¼¼Êõ£¬Ã¿¸öÈÝÆ÷±»·ÖÅäÒ»¸öVF£¬Ö±½Óͨ¹ýPCIeÍø¿¨ÓëÍâ½çͨÐÅ£¬ÓŵãÊÇÅÔ·ÁËhost kernel²»Õ¼ÈκμÆËã×ÊÔ´£¬¶øÇÒIOËٶȽϿ죬ȱµãÊÇVFÊýÁ¿ÓÐÏÞÇÒ¶ÔÈÝÆ÷Ç¨ÒÆµÄÖ§³Ö²»×ã¡£

Behind the POD

ÕâÖÖ·½Ê½ÊÇGoogleÔÚKubernetesÖеÄÉè¼ÆÖÐÌá³öÀ´µÄ¡£KubernetesÖУ¬PODÊÇÖ¸Ò»¸ö¿ÉÒÔ±»´´½¨¡¢Ïú»Ù¡¢µ÷¶È¡¢¹ÜÀíµÄ×îСµÄ²¿Êðµ¥Ôª£¬Ò»¸öPODÓÐÒ»¸ö»ù´¡ÈÝÆ÷ÒÔ¼°Ò»¸ö»òÒ»×éÓ¦ÓÃÈÝÆ÷£¬»ù´¡ÈÝÆ÷¶ÔÓ¦Ò»¸ö¶ÀÁ¢µÄnetwork namespace²¢ÓµÓÐÒ»¸öÆäËüPOD¿É¼ûµÄIPµØÖ·£¨ÒÔIP A.B.C.DÖ¸´ú£©£¬Ó¦ÓÃÈÝÆ÷¼äÔò¹²Ïí»ù´¡ÈÝÆ÷µÄnetwork namespace£¨°üÀ¨MAC¡¢IPÒÔ¼°¶Ë¿ÚºÅµÈ£©£¬»¹¿ÉÒÔ¹²Ïí»ù´¡ÈÝÆ÷µÄÆäËüµÄnamespace£¨ÈçIPC¡¢PID¡¢MountµÈ£©¡£POD×÷Ϊһ¸öÕûÌåÁ¬½ÓÔÚhostµÄvbridge/vswitchÉÏ£¬Ê¹ÓÃIPµØÖ·A.B.C.DÓëÆäËüPOD½øÐÐͨÐÅ£¬²»Í¬hostÖеÄPOD´¦ÓÚ²»Í¬µÄsubnetÖУ¬Í¬Ò»hostÖеIJ»Í¬POD´¦ÓÚͬһsubnetÖС£ÕâÖÖ·½Ê½µÄÓŵãÊÇһЩҵÎñÉÏÃÜÇÐÏà¹ØµÄÈÝÆ÷¿ÉÒÔ¹²ÏíPODµÄÈ«²¿×ÊÔ´£¨ËüÃÇÒ»°ã²»»á²úÉú×ÊÔ´ÉϵijåÍ»£©£¬¶øÕâЩÈÝÆ÷¼äµÄͨПßЧ±ãÀû¡£

3.3 Flannel

ÔÚk8sµÄÍøÂçÉè¼ÆÖУ¬·þÎñÒÔPODΪµ¥Î»£¬Ã¿¸öPODµÄIPµØÖ·£¬ÈÝÆ÷ͨ¹ýBehind the POD·½Ê½½ÓÈëÍøÂ磨¼û¡°ÈÝÆ÷µÄÍøÂçÄ£ÐÍ¡±£©£¬Ò»¸öPODÖпɰüº¬¶à¸öÈÝÆ÷£¬ÕâЩÈÝÆ÷¹²Ïí¸ÃPODµÄIPµØÖ·¡£ÁíÍ⣬k8sÒªÇóÈÝÆ÷µÄIPµØÖ·¶¼ÊÇÈ«Íø¿É·Óɵģ¬ÄÇôÏÔÈ»docker0+iptablesµÄNAT·½°¸ÊDz»¿ÉÐеġ£

ʵÏÖÉÏÊöÒªÇóÆäʵÓкܶàÖÖ×éÍø·½·¨£¬Flat L3ÊÇÒ»ÖÖ£¨ÈçCalico£©£¬Hierarchy L3£¨ÈçRomana£©ÊÇÒ»ÖÖ£¬ÁíÍâL3 OverlayÒ²ÊÇ¿ÉÒԵģ¬CoreOS¾Í²ÉÓÃL3 OverlayµÄ·½Ê½Éè¼ÆÁËflannel£¬ ²¢¹æ¶¨Ã¿¸öhostϸ÷¸öPODÊôÓÚͬһ¸ösubnet£¬²»Í¬µÄhost/VMϵÄPODÊôÓÚ²»Í¬subnet¡£ÎÒÃÇÀ´¿´flannelµÄ¼Ü¹¹£¬¿ØÖÆÆ½ÃæÉÏhost±¾µØµÄflanneld¸ºÔð´ÓÔ¶¶ËµÄETCD¼¯ÈºÍ¬²½±¾µØºÍÆäËühostÉϵÄsubnetÐÅÏ¢£¬²¢ÎªPOD·ÖÅäIPµØÖ·¡£Êý¾ÝÆ½Ãæflannelͨ¹ýUDP·â×°À´ÊµÏÖL3 Overlay£¬¼È¿ÉÒÔÑ¡ÔñÒ»°ãµÄTUNÉ豸ÓÖ¿ÉÒÔÑ¡ÔñVxLANÉ豸£¨×¢Ò⣬ÓÉÓÚͼÀ´Ô´²»Í¬£¬ÇëºöÂÔ¾ßÌåµÄIPµØÖ·£©¡£

flannelÊÇCoreOSÌṩÓÃÓÚ½â¾öDokcer¼¯Èº¿çÖ÷»úͨѶµÄ¸²¸ÇÍøÂ繤¾ß¡£ËüµÄÖ÷Ҫ˼·ÊÇ£ºÔ¤ÏÈÁô³öÒ»¸öÍø¶Î£¬Ã¿¸öÖ÷»úʹÓÃÆäÖÐÒ»²¿·Ö£¬È»ºóÿ¸öÈÝÆ÷±»·ÖÅ䲻ͬµÄip£»ÈÃËùÓеÄÈÝÆ÷ÈÏΪ´ó¼ÒÔÚͬһ¸öÖ±Á¬µÄÍøÂ磬µ×²ãͨ¹ýUDP/VxLANµÈ½øÐб¨Îĵķâ×°ºÍת·¢¡£

flannelĬÈÏʹÓÃ8285¶Ë¿Ú×÷ΪUDP·â×°±¨ÎĵĶ˿ڣ¬VxLanʹÓÃ8472¶Ë¿Ú¡£ÄÇôһÌõÍøÂ籨ÎÄÊÇÔõô´ÓÒ»¸öÈÝÆ÷·¢Ë͵½ÁíÍâÒ»¸öÈÝÆ÷µÄÄØ£¿

1.ÈÝÆ÷Ö±½ÓʹÓÃÄ¿±êÈÝÆ÷µÄip·ÃÎÊ£¬Ä¬ÈÏͨ¹ýÈÝÆ÷ÄÚ²¿µÄeth0·¢ËͳöÈ¥¡£

2.±¨ÎÄͨ¹ýveth pair±»·¢Ë͵½vethXXX¡£

3.vethXXXÊÇÖ±½ÓÁ¬½Óµ½ÐéÄâ½»»»»údocker0µÄ£¬±¨ÎÄͨ¹ýÐéÄâbridge docker0·¢ËͳöÈ¥¡£

4.²éÕÒ·ÓÉ±í£¬ÍⲿÈÝÆ÷ipµÄ±¨Îͼ»áת·¢µ½flannel0ÐéÄâÍø¿¨£¬ÕâÊÇÒ»¸öP2PµÄÐéÄâÍø¿¨£¬È»ºó±¨Îľͱ»×ª·¢µ½¼àÌýÔÚÁíÒ»¶ËµÄflanneld¡£

5.flanneldͨ¹ýetcdά»¤Á˸÷¸ö½ÚµãÖ®¼äµÄ·ÓÉ±í£¬°ÑÔ­À´µÄ±¨ÎÄUDP·â×°Ò»²ã£¬Í¨¹ýÅäÖõÄiface·¢ËͳöÈ¥¡£

6.±¨ÎÄͨ¹ýÖ÷»úÖ®¼äµÄÍøÂçÕÒµ½Ä¿±êÖ÷»ú¡£

7.±¨ÎļÌÐøÍùÉÏ£¬µ½´«Êä²ã£¬½»¸ø¼àÌýÔÚ8285¶Ë¿ÚµÄflanneld³ÌÐò´¦Àí¡£

8.Êý¾Ý±»½â°ü£¬È»ºó·¢Ë͸øflannel0ÐéÄâÍø¿¨¡£

9.²éÕÒ·ÓÉ±í£¬·¢ÏÖ¶ÔÓ¦ÈÝÆ÷µÄ±¨ÎÄÒª½»¸ødocker0¡£

10.docker0ÕÒµ½Á¬µ½×Ô¼ºµÄÈÝÆ÷£¬°Ñ±¨ÎÄ·¢Ë͹ýÈ¥¡£

   
5810 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤