±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚÍøÂ磬ÎÄÕ½éÉÜÁË
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ÕÒµ½Á¬µ½×Ô¼ºµÄÈÝÆ÷£¬°Ñ±¨ÎÄ·¢Ë͹ýÈ¥¡£
|