ÕªÒª£º±¾ÏµÁÐÎÄÕÂ×ÅÑÛÓÚʵ¼Ê²¿Ê𣬴øÄú¿ìËÙÕÆÎÕKubernetes¡£±¾ÎÄÖ÷Òª½éÉܲ¿Êð֮ǰÐèÒªÁ˽âµÄÔÀíºÍ¸ÅÄ°üÀ¨KubernetesµÄ×é¼þ½á¹¹£¬¸÷¸ö×é¼þ½ÇÉ«µÄ¹¦ÄÜ£¬ÒÔ¼°KubernetesµÄÓ¦ÓÃÄ£Ð͵ȡ£
¡¾±àÕß°´¡¿Kubernetes¿ÉÓÃÀ´¹ÜÀíLinuxÈÝÆ÷¼¯Èº£¬¼ÓËÙ¿ª·¢ºÍ¼ò»¯ÔËά£¨¼´DevOps£©¡£µ«Ä¿Ç°ÍøÂçÉϹØÓÚKubernetesµÄÎÄÕ½éÉÜÐÔÔ¶¶àÓÚʵ¼ÊʹÓᣱ¾ÏµÁÐÎÄÕÂ×ÅÑÛÓÚʵ¼Ê²¿Ê𣬴øÄú¿ìËÙÕÆÎÕKubernetes¡£±¾ÎÄΪÉÏÆª£¬Ö÷Òª½éÉܲ¿Êð֮ǰÐèÒªÁ˽âµÄÔÀíºÍ¸ÅÄ°üÀ¨KubernetesµÄ×é¼þ½á¹¹£¬¸÷¸ö×é¼þ½ÇÉ«µÄ¹¦ÄÜ£¬ÒÔ¼°KubernetesµÄÓ¦ÓÃÄ£Ð͵ȡ£
Ê®¶àÄêÀ´GoogleÒ»Ö±ÔÚÉú²ú»·¾³ÖÐʹÓÃÈÝÆ÷ÔËÐÐÒµÎñ£¬¸ºÔð¹ÜÀíÆäÈÝÆ÷¼¯ÈºµÄϵͳ¾ÍÊÇKubernetesµÄǰÉíBorg¡£ÆäʵÏÖÔںܶ๤×÷ÔÚKubernetesÏîÄ¿ÉϵÄGoogle¿ª·¢ÕßÏÈǰ¾ÍÔÚBorgÕâ¸öÏîÄ¿ÉϹ¤×÷¡£¶àÊýKubernetesµÄÓ¦Óò¿ÊðÄ£Ð͵Ä˼Ïë¶¼ÆðÔ´ÓÚBorg,Á˽âÕâЩģÐÍÊÇÕÆÎÕKubernetesµÄ¹Ø¼ü¡£KubernetesµÄAPI°æ±¾Ä¿Ç°ÊÇv1£¬±¾ÎÄÒÔ´úÂë0.18.2°æÎª»ù´¡À´½éÉÜËüµÄÓ¦Óò¿ÊðÄ£ÐÍ£¬×îºóÎÒÃÇÓÃÒ»¸ö¼òµ¥µÄÓÃÀýÀ´ËµÃ÷²¿Êð¹ý³Ì¡£ÔÚ²¿Êð½áÊøºó£¬²ûÊöÁËËüÊÇÈçºÎÓÃIptables¹æÔòÀ´ÊµÏÖ¸÷ÖÖÀàÐÍServiceµÄ¡£
Kubernetes¼Ü¹¹
Kubernetes¼¯Èº°üÀ¨Kubernetes´úÀí(agents )ºÍKubernetes·þÎñ(master node)Á½ÖÖ½ÇÉ«£¬´úÀí½ÇÉ«µÄ×é¼þ°üÀ¨Kube-proxyºÍKubelet£¬ËüÃÇͬʱ²¿ÊðÔÚÒ»¸ö½ÚµãÉÏ£¬Õâ¸ö½ÚµãÒ²¾ÍÊÇ´úÀí½Úµã¡£·þÎñ½ÇÉ«µÄ×é¼þ°üÀ¨kube-apiserver£¬kube-scheduler£¬kube-controller-manager£¬ËüÃÇ¿ÉÒÔÈÎÒâ²¼Êô£¬ËüÃÇ¿ÉÒÔ²¿ÊðÔÚͬһ¸ö½ÚµãÉÏ£¬Ò²¿ÉÒÔ²¿ÊðÔÚ²»Í¬µÄ½ÚµãÉÏ£¨Ä¿Ç°°æ±¾ºÃÏñ²»ÐУ©¡£Kubernetes¼¯ÈºÒÀÀµµÄµÚÈý·½×é¼þĿǰÓÐetcdºÍdockerÁ½¸ö¡£Ç°ÕßÌṩ״̬´æ´¢£¬¶þÕßÓÃÀ´¹ÜÀíÈÝÆ÷¡£¼¯Èº»¹¿ÉÒÔʹÓ÷ֲ¼Ê½´æ´¢¸øÈÝÆ÷Ìṩ´æ´¢¿Õ¼ä¡£ÏÂͼÏÔʾÁËĿǰϵͳµÄ×é³É²¿·Ö£º

Kubernetes´úÀí½Úµã
KubeletºÍKube-proxyÔËÐÐÔÚ´úÀí½ÚµãÉÏ¡£ËûÃǼàÌý·þÎñ½ÚµãµÄÐÅÏ¢À´Æô¶¯ÈÝÆ÷ºÍʵÏÖKubernetesÍøÂçºÍÆäËüÒµÎñÄ£ÐÍ£¬±ÈÈçService¡¢PodµÈ¡£µ±È»Ã¿¸ö´úÀí½Úµã¶¼ÔËÐÐDocker¡£Docker¸ºÔðÏÂÔØÈÝÆ÷¾µÏñºÍÔËÐÐÈÝÆ÷¡£
Kubelet
Kubelet×é¼þ¹ÜÀíPodsºÍËüÃǵÄÈÝÆ÷£¬¾µÏñºÍ¾íµÈÐÅÏ¢¡£
Kube-Proxy
Kube-proxyÊÇÒ»¸ö¼òµ¥µÄÍøÂç´úÀíºÍ¸ºÔؾùºâÆ÷¡£Ëü¾ßÌåʵÏÖServiceÄ£ÐÍ£¬Ã¿¸öService¶¼»áÔÚËùÓеÄKube-proxy½ÚµãÉÏÌåÏÖ¡£¸ù¾ÝServiceµÄselectorËù¸²¸ÇµÄPods, Kube-proxy»á¶ÔÕâЩPods×ö¸ºÔؾùºâÀ´·þÎñÓÚServiceµÄ·ÃÎÊÕß¡£
Kubernetes·þÎñ½Úµã
Kubernetes·þÎñ×é¼þÐγÉÁËKubernetesµÄ¿ØÖÆÆ½Ã棬ĿǰËûÃÇÔËÐÐÔÚµ¥Ò»½ÚµãÉÏ£¬µ«Êǽ«À´»á·Ö¿ªÀ´²¿Êð£¬ÒÔÖ§³Ö¸ß¿ÉÓÃÐÔ¡£
etcd
ËùÓеij־ÃÐÔ״̬¶¼±£´æÔÚetcdÖС£Etcdͬʱ֧³Öwatch£¬ÕâÑù×é¼þºÜÈÝÒ׵õ½ÏµÍ³×´Ì¬µÄ±ä»¯£¬´Ó¶ø¿ìËÙÏìÓ¦ºÍе÷¹¤×÷¡£
Kubernetes API Server
Õâ¸ö×é¼þÌṩ¶ÔAPIµÄÖ§³Ö£¬ÏìÓ¦REST²Ù×÷£¬ÑéÖ¤APIÄ£Ðͺ͸üÐÂetcdÖеÄÏàÓ¦¶ÔÏó¡£
Scheduler
ͨ¹ý·ÃÎÊKubernetesÖÐ/binding API, Scheduler¸ºÔðPodsÔÚ¸÷¸ö½ÚµãÉϵķÖÅä¡£SchedulerÊDzå¼þʽµÄ£¬Kubernetes½«À´¿ÉÒÔÖ§³ÖÓû§×Ô¶¨ÒåµÄscheduler¡£
Kubernetes Controller Manager Server
Controller Manager Server¸ºÔðËùÓÐÆäËüµÄ¹¦ÄÜ£¬±ÈÈçendpoints¿ØÖÆÆ÷¸ºÔðEndpoints¶ÔÏóµÄ´´½¨£¬¸üС£node¿ØÖÆÆ÷¸ºÔð½ÚµãµÄ·¢ÏÖ£¬¹ÜÀíºÍ¼à¿Ø¡£½«À´¿ÉÄÜ»á°ÑÕâЩ¿ØÖÆÆ÷²ð·Ö²¢ÇÒÌṩ²å¼þʽµÄʵÏÖ¡£
KubernetesÄ£ÐÍ
KubernetesµÄΰ´óÖ®´¦¾ÍÔÚÓÚËüµÄÓ¦Óò¿ÊðÄ£ÐÍ£¬Ö÷Òª°üÀ¨Pod¡¢Replication controller¡¢LabelºÍService¡£
Pod
KubernetesµÄ×îС²¿Êðµ¥ÔªÊÇPod¶ø²»ÊÇÈÝÆ÷¡£×÷ΪFirst class API¹«Ãñ£¬PodsÄܱ»´´½¨£¬µ÷¶ÈºÍ¹ÜÀí¡£¼òµ¥µØÀ´Ëµ£¬ÏñÒ»¸öÍã¶¹¼ÔÖеÄÍã¶¹Ò»Ñù£¬Ò»¸öPodÖеÄÓ¦ÓÃÈÝÆ÷ͬÏíͬһ¸öÉÏÏÂÎÄ£º
- PID Ãû×ֿռ䡣µ«ÊÇÔÚdockerÖв»Ö§³Ö
- ÍøÂçÃû×ֿռ䣬ÔÚͬһPodÖеĶà¸öÈÝÆ÷·ÃÎÊͬһ¸öIPºÍ¶Ë¿Ú¿Õ¼ä¡£
- IPCÃû×ֿռ䣬ͬһ¸öPodÖеÄÓ¦ÓÃÄܹ»Ê¹ÓÃSystemV IPCºÍPOSIXÏûÏ¢¶ÓÁнøÐÐͨÐÅ¡£
- UTSÃû×ֿռ䣬ͬһ¸öPodÖеÄÓ¦Óù²ÏíÒ»¸öÖ÷»úÃû¡£
- PodÖеĸ÷¸öÈÝÆ÷Ó¦Óû¹¿ÉÒÔ·ÃÎÊPod¼¶±ð¶¨ÒåµÄ¹²Ïí¾í¡£
´ÓÉúÃüÖÜÆÚÀ´Ëµ£¬PodÓ¦¸ÃÊǶÌÔݵĶø²»Êdz¤¾ÃµÄÓ¦ÓᣠPods±»µ÷¶Èµ½½Úµã£¬±£³ÖÔÚÕâ¸ö½ÚµãÉÏÖ±µ½±»Ïú»Ù¡£µ±½ÚµãËÀÍöʱ£¬·ÖÅäµ½Õâ¸ö½ÚµãµÄPods½«»á±»É¾µô¡£½«À´¿ÉÄÜ»áʵÏÖPodµÄÇ¨ÒÆÌØÐÔ¡£ÔÚʵ¼ÊʹÓÃʱ£¬ÎÒÃÇÒ»°ã²»Ö±½Ó´´½¨Pods, ÎÒÃÇͨ¹ýreplication controllerÀ´¸ºÔðPodsµÄ´´½¨£¬¸´ÖÆ£¬¼à¿ØºÍÏú»Ù¡£Ò»¸öPod¿ÉÒÔ°üÀ¨¶à¸öÈÝÆ÷£¬ËûÃÇÖ±½ÓÍùÍùÏ໥Ð×÷Íê³ÉÒ»¸öÓ¦Óù¦ÄÜ¡£
Replication controller
¸´ÖÆ¿ØÖÆÆ÷È·±£PodµÄÒ»¶¨ÊýÁ¿µÄ·ÝÊý(replica)ÔÚÔËÐС£Èç¹û³¬¹ýÕâ¸öÊýÁ¿£¬¿ØÖÆÆ÷»áɱËÀһЩ£¬Èç¹ûÉÙÁË£¬¿ØÖÆÆ÷»áÆô¶¯Ò»Ð©¡£¿ØÖÆÆ÷Ò²»áÔÚ½ÚµãʧЧ¡¢Î¬»¤µÄʱºòÀ´±£Ö¤Õâ¸öÊýÁ¿¡£ËùÒÔÇ¿ÁÒ½¨Ò鼴ʹÎÒÃǵķÝÊýÊÇ1£¬Ò²ÒªÊ¹Óø´ÖÆ¿ØÖÆÆ÷£¬¶ø²»ÊÇÖ±½Ó´´½¨Pod¡£
ÔÚÉúÃüÖÜÆÚÉϽ²£¬¸´ÖÆ¿ØÖÆÆ÷×Ô¼º²»»áÖÕÖ¹£¬µ«ÊÇ¿ç¶È²»»á±ÈServiceÇ¿¡£ServiceÄܹ»ºá¿ç¶à¸ö¸´ÖÆ¿ØÖÆÆ÷¹ÜÀíµÄPods¡£¶øÇÒÔÚÒ»¸öServiceµÄÉúÃüÖÜÆÚÄÚ£¬¸´ÖÆ¿ØÖÆÆ÷Äܱ»É¾³ýºÍ´´½¨¡£ServiceºÍ¿Í»§¶Ë³ÌÐòÊDz»ÖªµÀ¸´ÖÆ¿ØÖÆÆ÷µÄ´æÔڵġ£
¸´ÖÆ¿ØÖÆÆ÷´´½¨µÄPodsÓ¦¸ÃÊÇ¿ÉÒÔ»¥ÏàÌæ»»µÄºÍÓïÒåÉÏÏàͬµÄ£¬Õâ¸ö¶ÔÎÞ״̬·þÎñÌØ±ðºÏÊÊ¡£
PodÊÇÁÙʱÐԵĶÔÏ󣬱»´´½¨ºÍÏú»Ù£¬¶øÇÒ²»»á»Ö¸´¡£¸´ÖÆÆ÷¶¯Ì¬µØ´´½¨ºÍÏú»ÙPod¡£ËäÈ»Pod»á·ÖÅäµ½IPµØÖ·£¬µ«ÊÇÕâ¸öIPµØÖ·¶¼²»Êdz־õġ£ÕâÑù¾Í²úÉúÁËÒ»¸öÒÉÎÊ£ºÍⲿÈçºÎÏû·ÑPodÌṩµÄ·þÎñÄØ£¿
Service
Service¶¨ÒåÁËÒ»¸öPodµÄÂß¼¼¯ºÏºÍ·ÃÎÊÕâ¸ö¼¯ºÏµÄ²ßÂÔ¡£¼¯ºÏÊÇͨ¹ý¶¨ÒåServiceʱÌṩµÄLabelÑ¡ÔñÆ÷Íê³ÉµÄ¡£¾Ù¸öÀý×Ó£¬ÎÒÃǼٶ¨ÓÐ3¸öPodµÄ±¸·ÝÀ´Íê³ÉÒ»¸öͼÏñ´¦ÀíµÄºó¶Ë¡£ÕâЩºó¶Ë±¸·ÝÂß¼ÉÏÊÇÏàͬµÄ£¬Ç°¶Ë²»¹ØÐÄÄĸöºó¶ËÔÚ¸øËüÌṩ·þÎñ¡£ËäÈ»×é³ÉÕâ¸öºó¶ËµÄʵ¼ÊPod¿ÉÄܱ仯£¬Ç°¶Ë¿Í»§¶Ë²»»áÒâʶµ½Õâ¸ö±ä»¯£¬Ò²²»»á¸ú×Ùºó¶Ë¡£Service¾ÍÊÇÓÃÀ´ÊµÏÖÕâÖÖ·ÖÀëµÄ³éÏó¡£
¶ÔÓÚService£¬ÎÒÃÇ»¹¿ÉÒÔ¶¨ÒåEndpoint£¬Endpoint°ÑServiceºÍPod¶¯Ì¬µØÁ¬½ÓÆðÀ´¡£
Service Cluster IPºÍ kuber proxy
ÿ¸ö´úÀí½Úµã¶¼ÔËÐÐÁËÒ»¸ökube-proxy½ø³Ì¡£Õâ¸ö½ø³Ì´Ó·þÎñ½ø³ÌÄDZßÄõ½ServiceºÍEndpoint¶ÔÏóµÄ±ä»¯¡£ ¶Ôÿһ¸öService, ËüÔÚ±¾µØ´ò¿ªÒ»¸ö¶Ë¿Ú¡£ µ½Õâ¸ö¶Ë¿ÚµÄÈÎÒâÁ¬½Ó¶¼»á´úÀíµ½ºó¶ËPod¼¯ºÏÖеÄÒ»¸öPod IPºÍ¶Ë¿Ú¡£ÔÚ´´½¨ÁË·þÎñºó£¬·þÎñEndpointÄ£ÐÍ»áÌåÏÖºó¶ËPodµÄ IPºÍ¶Ë¿ÚÁÐ±í£¬kube-proxy¾ÍÊÇ´ÓÕâ¸öendpointά»¤µÄÁбíÖÐÑ¡Ôñ·þÎñºó¶ËµÄ¡£ÁíÍâService¶ÔÏóµÄsessionAffinityÊôÐÔÒ²»á°ïÖúkube-proxyÀ´Ñ¡ÔñÄĸö¾ßÌåµÄºó¶Ë¡£È±Ê¡Çé¿öÏ£¬ºó¶ËPodµÄÑ¡ÔñÊÇËæ»úµÄ¡£¿ÉÒÔÉèÖÃservice.spec.sessionAffinity³É"ClientIP"À´Ö¸¶¨Í¬Ò»¸öClientIPµÄÁ÷Á¿´úÀíµ½Í¬Ò»¸öºó¶Ë¡£ÔÚʵÏÖÉÏ£¬kube-proxy»áÓÃIPtables¹æÔò°Ñ·ÃÎÊServiceµÄCluster IPºÍ¶Ë¿ÚµÄÁ÷Á¿Öض¨Ïòµ½Õâ¸ö±¾µØ¶Ë¿Ú¡£ÏÂÃæµÄ²¿·Ö»á½²Ê²Ã´ÊÇserviceµÄCluster IP¡£
×¢Ò⣺ÔÚ0.18ÒÔǰµÄ°æ±¾ÖÐCluster IP½ÐPortalNet IP¡£
ÄÚ²¿Ê¹ÓÃÕߵķþÎñ·¢ÏÖ
KubernetesÔÚÒ»¸ö¼¯ÈºÄÚ´´½¨µÄ¶ÔÏó»òÕßÔÚ´úÀí¼¯Èº½ÚµãÉÏ·¢³ö·ÃÎʵĿͻ§¶ËÎÒÃdzÆÖ®ÎªÄÚ²¿Ê¹ÓÃÕß¡£Òª°Ñ·þÎñ±©Â¶¸øÄÚ²¿Ê¹ÓÃÕߣ¬KubernetesÖ§³ÖÁ½ÖÖ·½Ê½£º»·¾³±äÁ¿ºÍDNS¡£
»·¾³±äÁ¿
µ±kubeletÔÚij¸ö½ÚµãÉÏÆô¶¯Ò»¸öPodʱ£¬Ëü»á¸øÕâ¸öPodµÄÈÝÆ÷Ϊµ±Ç°ÔËÐеÄServiceÉèÖÃһϵÁл·¾³±äÁ¿£¬ÕâÑùPod¾Í¿ÉÒÔ·ÃÎÊÕâЩServiceÁË¡£Ò»°ãµØÇé¿öÊÇ{SVCNAME}_SERVICE_HOSThºÍ{SVCNAME}_SERVICE_PORT±äÁ¿, ÆäÖÐ{SVCNAME}ÊÇServiceÃû×Ö±ä³É´óд£¬Öл®Ïß±ä³ÉÏ»®Ïß¡£±ÈÈçService "redis-master"£¬ËüµÄ¶Ë¿ÚÊÇ TCP 6379£¬·ÖÅäµ½µÄCluster IPµØÖ·ÊÇ 10.0.0.11£¬kubelet¿ÉÄÜ»á²úÉúÏÂÃæµÄ±äÁ¿¸øÐ´´½¨µÄPodÈÝÆ÷£º
REDIS_MASTER_SERVICE_HOST=10.0.0.11
REDIS_MASTER_SERVICE_PORT=6379
REDIS_MASTER_PORT=tcp://10.0.0.11:6379
REDIS_MASTER_PORT_6379_TCP=tcp://10.0.0.11:6379
REDIS_MASTER_PORT_6379_TCP_PROTO=tcp
REDIS_MASTER_PORT_6379_TCP_PORT=6379
REDIS_MASTER_PORT_6379_TCP_ADDR=10.0.0.11
×¢Ò⣬ֻÓÐÔÚij¸öServiceºó´´½¨µÄPod²Å»áÓÐÕâ¸öServiceµÄ»·¾³±äÁ¿¡£
DNS
Ò»¸ö¿ÉÑ¡µÄKubernetes¸½¼þ£¨Ç¿ÁÒ½¨ÒéÓû§Ê¹Óã©ÊÇDNS·þÎñ¡£Ëü¸ú×Ù¼¯ÈºÖÐService¶ÔÏó£¬ÎªÃ¿¸öService¶ÔÏó´´½¨DNS¼Ç¼¡£ÕâÑùËùÓеÄPod¾Í¿ÉÒÔͨ¹ýDNS·ÃÎÊ·þÎñÁË¡£
±ÈÈç˵ÎÒÃÇÔÚKubernetes Ãû×Ö¿Õ¼ä"my-ns"ÖÐÓиö½Ðmy-serviceµÄ·þÎñ£¬DNS·þÎñ»á´´½¨Ò»Ìõ"my-service.my-ns"µÄDNS¼Ç¼¡£Í¬ÔÚÕâ¸öÃüÃû¿Õ¼äµÄPod¾Í¿ÉÒÔͨ¹ý"my-service"À´µÃµ½Õâ¸öService·ÖÅäµ½µÄCluster IP£¬ÔÚÆäËüÃüÃû¿Õ¼äµÄPodÔò¿ÉÒÔÓÃÈ«ÏÞ¶¨Ãû"my-service.my-ns"À´»ñµÃÕâ¸öServiceµÄµØÖ·¡£
Pod IP and Service ClusterIP
Pod IP µØÖ·ÊÇʵ¼Ê´æÔÚÓÚij¸öÍø¿¨(¿ÉÒÔÊÇÐéÄâÉ豸)Éϵ쬵«Service Cluster IP¾Í²»Ò»ÑùÁË£¬Ã»ÓÐÍøÂçÉ豸ΪÕâ¸öµØÖ·¸ºÔð¡£ËüÊÇÓÉkube-proxyʹÓÃIptables¹æÔòÖØÐ¶¨Ïòµ½Æä±¾µØ¶Ë¿Ú£¬ÔÙ¾ùºâµ½ºó¶ËPodµÄ¡£ÎÒÃÇÇ°ÃæËµµÄService»·¾³±äÁ¿ºÍDNS¶¼Ê¹ÓÃServiceµÄCluster IPºÍ¶Ë¿Ú¡£
¾ÍÄÃÉÏÃæÎÒÃÇÌáµ½µÄͼÏñ´¦Àí³ÌÐòΪÀý¡£µ±ÎÒÃǵÄService±»´´½¨Ê±£¬Kubernetes¸øËü·ÖÅäÒ»¸öµØÖ·10.0.0.1¡£Õâ¸öµØÖ·´ÓÎÒÃÇÆô¶¯APIµÄservice-cluster-ip-range²ÎÊý(¾É°æ±¾Îªportal_net²ÎÊý)Ö¸¶¨µÄµØÖ·³ØÖзÖÅ䣬±ÈÈç--service-cluster-ip-range=10.0.0.0/16¡£¼ÙÉèÕâ¸öServiceµÄ¶Ë¿ÚÊÇ1234¡£¼¯ÈºÄÚµÄËùÓÐkube-proxy¶¼»á×¢Òâµ½Õâ¸öService¡£µ±proxy·¢ÏÖÒ»¸öеÄserviceºó£¬Ëü»áÔÚ±¾µØ½Úµã´ò¿ªÒ»¸öÈÎÒâ¶Ë¿Ú£¬½¨ÏàÓ¦µÄiptables¹æÔò£¬Öض¨Ïò·þÎñµÄIPºÍportµ½Õâ¸öн¨µÄ¶Ë¿Ú£¬¿ªÊ¼½ÓÊܵ½´ïÕâ¸ö·þÎñµÄÁ¬½Ó¡£
µ±Ò»¸ö¿Í»§¶Ë·ÃÎÊÕâ¸öserviceʱ£¬ÕâЩiptable¹æÔò¾Í¿ªÊ¼Æð×÷Ó㬿ͻ§¶ËµÄÁ÷Á¿±»Öض¨Ïòµ½kube-proxyΪÕâ¸öservice´ò¿ªµÄ¶Ë¿ÚÉÏ£¬kube-proxyËæ»úÑ¡ÔñÒ»¸öºó¶ËpodÀ´·þÎñ¿Í»§¡£Õâ¸öÁ÷³ÌÈçÏÂͼËùʾ£º

¸ù¾ÝKubernetesµÄÍøÂçÄ£ÐÍ£¬Ê¹ÓÃService Cluster IPºÍPort·ÃÎÊServiceµÄ¿Í»§¶Ë¿ÉÒÔ×øÂäÔÚÈÎÒâ´úÀí½ÚµãÉÏ¡£ÍⲿҪ·ÃÎÊService£¬ÎÒÃǾÍÐèÒª¸øServiceÍⲿ·ÃÎÊIP¡£
Íⲿ·ÃÎÊService
Service¶ÔÏóÔÚCluster IP range³ØÖзÖÅäµ½µÄIPÖ»ÄÜÔÚÄÚ²¿·ÃÎÊ£¬Èç¹û·þÎñ×÷Ϊһ¸öÓ¦ÓóÌÐòÄÚ²¿µÄ²ã´Î£¬»¹ÊǺܺÏÊʵġ£Èç¹ûÕâ¸öService×÷Ϊǰ¶Ë·þÎñ£¬×¼±¸Îª¼¯ÈºÍâµÄ¿Í»§ÌṩҵÎñ£¬ÎÒÃǾÍÐèÒª¸øÕâ¸ö·þÎñÌṩ¹«¹²IPÁË¡£
Íⲿ·ÃÎÊÕßÊÇ·ÃÎʼ¯Èº´úÀí½ÚµãµÄ·ÃÎÊÕß¡£ÎªÕâЩ·ÃÎÊÕßÌṩ·þÎñ£¬ÎÒÃÇ¿ÉÒÔÔÚ¶¨ÒåServiceʱָ¶¨Æäspec.publicIPs£¬Ò»°ãÇé¿öÏÂpublicIP ÊÇ´úÀí½ÚµãµÄÎïÀíIPµØÖ·¡£ºÍÏÈǰµÄCluster IP rangeÉÏ·ÖÅäµ½µÄÐéÄâµÄIPÒ»Ñù£¬kube-proxyͬÑù»áΪÕâЩpublicIPÌṩIptables ÖØ¶¨Ïò¹æÔò£¬°ÑÁ÷Á¿×ª·¢µ½ºó¶ËµÄPodÉÏ¡£ÓÐÁËpublicIP£¬ÎÒÃǾͿÉÒÔʹÓÃload balancerµÈ³£ÓõĻ¥ÁªÍø¼¼ÊõÀ´×éÖ¯Íⲿ¶Ô·þÎñµÄ·ÃÎÊÁË¡£
spec.publicIPsÔÚеİ汾Öбê¼ÇΪ¹ýʱÁË£¬´úÌæËüµÄÊÇspec.type=NodePort£¬Õâ¸öÀàÐ͵Äservice£¬ÏµÍ³»á¸øËüÔÚ¼¯ÈºµÄ¸÷¸ö´úÀí½ÚµãÉÏ·ÖÅäÒ»¸ö½Úµã¼¶±ðµÄ¶Ë¿Ú£¬ÄÜ·ÃÎʵ½´úÀí½ÚµãµÄ¿Í»§¶Ë¶¼ÄÜ·ÃÎÊÕâ¸ö¶Ë¿Ú£¬´Ó¶ø·ÃÎʵ½·þÎñ¡£
LabelºÍLabel selector
Label±êÇ©ÔÚKubernetesÄ£ÐÍÖÐÕ¼×ŷdz£ÖØÒªµÄ×÷Óá£Label±íÏÖΪkey/value¶Ô£¬¸½¼Óµ½Kubernetes¹ÜÀíµÄ¶ÔÏóÉÏ£¬µäÐ͵ľÍÊÇPods¡£ËüÃǶ¨ÒåÁËÕâЩ¶ÔÏóµÄʶ±ðÊôÐÔ£¬ÓÃÀ´×éÖ¯ºÍÑ¡ÔñÕâЩ¶ÔÏó¡£Label¿ÉÒÔÔÚ¶ÔÏó´´½¨Ê±¸½¼ÓÔÚ¶ÔÏóÉÏ£¬Ò²¿ÉÒÔ¶ÔÏó´æÔÚʱͨ¹ýAPI¹ÜÀí¶ÔÏóµÄLabel¡£
ÔÚ¶¨ÒåÁ˶ÔÏóµÄLabelºó£¬ÆäËüÄ£ÐÍ¿ÉÒÔÓÃLabel Ñ¡ÔñÆ÷£¨selector)À´¶¨ÒåÆä×÷ÓõĶÔÏó¡£
LabelÑ¡ÔñÆ÷ÓÐÁ½ÖÖ£¬·Ö±ðÊÇEquality-basedºÍSet-based¡£
±ÈÈçÈçÏÂEquality-basedÑ¡ÔñÆ÷ÑùÀý£º
environment = production tier != frontend environment = production£¬tier != frontend |
¶ÔÓÚÉÏÃæµÄÑ¡ÔñÆ÷£¬µÚÒ»ÌõÆ¥ÅäLabel¾ßÓÐenvironment keyÇÒµÈÓÚproductionµÄ¶ÔÏ󣬵ڶþÌõÆ¥Åä¾ßÓÐtier key£¬µ«ÊÇÖµ²»µÈÓÚfrontendµÄ¶ÔÏó¡£ÓÉÓÚkubernetesʹÓÃANDÂß¼£¬µÚÈýÌõÆ¥Åäproductionµ«²»ÊÇfrontendµÄ¶ÔÏó¡£
Set-basedÑ¡ÔñÆ÷ÑùÀý£º
environment in (production, qa) tier notin (frontend, backend) partition |
µÚÒ»ÌõÑ¡Ôñ¾ßÓÐenvironment key£¬¶øÇÒÖµÊÇproduction»òÕßqaµÄlabel¸½¼ÓµÄ¶ÔÏó¡£µÚ¶þÌõÑ¡Ôñ¾ßÓÐtier key£¬µ«ÊÇÆäÖµ²»ÊÇfrontendºÍbackend¡£µÚÈýÌõÑ¡Ôò¾ßÓÐpartition keyµÄ¶ÔÏ󣬲»¶Ôvalue½øÐÐУÑé¡£
replication controller¸´ÖÆ¿ØÖÆÆ÷ºÍService¶¼ÓÃlabelºÍlabel selctorÀ´¶¯Ì¬µØÅ䱸×÷ÓöÔÏ󡣸´ÖÆ¿ØÖÆÆ÷ÔÚ¶¨ÒåµÄʱºò¾ÍÖ¸¶¨ÁËÆäÒª´´½¨PodµÄLabelºÍ×Ô¼ºÒªÆ¥ÅäÕâ¸öPodµÄselector£¬API·þÎñÆ÷Ó¦¸ÃУÑéÕâ¸ö¶¨Òå¡£ÎÒÃÇ¿ÉÒÔ¶¯Ì¬µØÐÞ¸Äreplication controller´´½¨µÄPodµÄLabelÓÃÓÚµ÷ʽ£¬Êý¾Ý»Ö¸´µÈ¡£Ò»µ©Ä³¸öPodÓÉÓÚLabel¸Ä±ä´Óreplication controllerÒÆ³öÀ´ºó£¬replication controller»áÂíÉÏÆô¶¯Ò»¸öеÄPodÀ´È·±£¸´ÖƳØ×ÓÖеķÝÊý¡£¶ÔÓÚService£¬Label selector¿ÉÒÔÓÃÀ´Ñ¡ÔñÒ»¸öServiceµÄºó¶ËPods¡£
×÷Õß¼ò½é£º¹¨ÓÀÉú£¬¾ÅÖÝÔÆ¼Ü¹¹Ê¦¡£¶àÄêLinuxϵͳ¿ª·¢£¬J2EE²úÆ·ºÍÔÆ¼ÆËãÏà¹Ø¼¼ÊõÑз¢¾Ñ顣Ŀǰ»îÔ¾ÔÚOpenStackÉçÇøµÄ¸÷¸öÏîÄ¿ÉÏ£¬Ö÷Òª¼¼Êõ·½ÏòÊÇÐéÄâÍøÂçÏîÄ¿Neutron£¬ÊÇNeutronÏîÄ¿ÔçÆÚµÄÖ÷Òª¹±Ï×ÕßÖ®Ò»¡£
|