±à¼ÍƼö: |
±¾ÎÄÀ´Ô´infoq£¬Ö÷ÒªÕë¶ÔÂ䵨¹ý³ÌÖÐÓöµ½µÄµäÐ͹¦ÄÜÐÔÐèÇó¼°¼¼Êõ·½°¸Ñݽø½øÐÐÁË×ܽá½éÉÜ,ÒÔ¼°Öмä¼þµÄÓÅ»¯Óë̽Ë÷µÈ¡£ |
|
±³¾°½éÉÜ
Service Mesh£¨·þÎñÍø¸ñ£©ÊÇÒ»¸ö»ù´¡ÉèÊ©²ã£¬È÷þÎñÖ®¼äµÄͨПü°²È«¡¢¿ìËٺͿɿ¿£¬ÊÇÔÆÔÉú¼¼ÊõÕ»µÄ¹Ø¼ü×齨֮һ¡£2018
ÄêÊÇ Service Mesh ¸ß¸èÃͽøµÄÒ»Ä꣬Service Mesh Êý¾ÝÃæ°å°Ù»¨Æë·Å£¬±éµØ¿ª»¨£¬Òµ½ç¼¸ºõËùÓд󳧶¼ÔÚÍÆ³ö×Ô¼ºµÄ
Service Mesh ²úÆ·¡£2018 Äê Service Mesh ´óʼþÈçÏ£º
a.2018 Äê 7 Ô 31 ÈÕ£¬Istio 1.0 °æ±¾·¢²¼£¬±êÖ¾×Å Istio ¿ÉÓÃÓÚÉú²ú»·¾³
b.2018 Äê 9 Ô 19 ÈÕ£¬Conduit£¬Õâ¸öÊ·ÉÏΨһһ¸öÖ÷´ò rust ÓïÑ﵀ Mesh£¬Ðû²¼ºÏÈëµ½
Linkerd£¬ºóÐø×÷Ϊ linkerd2.x °æ±¾¼ÌÐøÑݽø¡£
c.2018 Äê 11 Ô 28 ÈÕ£¬Istio µÄ¹ÙÅä sidecar£¬¸ßÐÔÄܱßÔµ´úÀí Envoy£¬³ÉΪÁ˼Ì
k8s ÒÔ¼° prometheus Ö®ºó£¬µÚÈý¸ö´Ó CNCF ±ÏÒµµÄÏîÄ¿¡£
d.2018 Äê 12 Ô 5 ÈÕ£¬AWS ÍÆ³ö·þÎñÍø×´ÍøÂç App Mesh ¹«¿ªÔ¤ÀÀ°æ£¬¹©Óû§ÇáËɵļàÊÓÓë¿ØÖÆ
AWS ÉÏ£¬¹¹³ÉÓ¦ÓóÌÐò΢·þÎñÖ®¼äµÄͨÐÅ¡£
ÔçÔÚ 2017 ÄêÌÚÑ¶ÔÆÖмä¼þÍŶӾÍÑ¡¶¨ Istio Ϊ¼¼Êõ·Ïߣ¬¿ªÊ¼ Service Mesh
µÄÏà¹ØÑз¢¹¤×÷£¬×÷ΪÌÚÑ¶ÔÆ TSF£¨Î¢·þÎñƽ̨£©µÄÎÞÇÖÈëʽ·þÎñ¿ò¼ÜµÄºËÐÄʵÏÖ£¬²¢ÔÚ 18 Äê³õÔÚÌÚѶ¹ã¸æÆ½Ì¨Í¶È룬´òÄ¥Îȶ¨ºóÂ½Ðø¿ªÊ¼¶ÔÍâÊä³ö£¬Ä¿Ç°ÔÚÒøÐС¢µçÉÌ¡¢ÁãÊÛ¡¢Æû³µµÈÐÐÒµ¶¼ÓÐÂ䵨°¸Àý¡£
Â䵨¹ý³Ì²¢·ÇÒ»·«·ç˳£¬±¾ÎĽ«¶ÔÌÚÑ¶ÔÆ Service Mesh ÔÚÉú²úʵ¼ù¹ý³ÌÖÐÓöµ½µÄµäÐÍÎÊÌâÒÔ¼°½â¾ö·½°¸½øÐÐ×ܽá·ÖÏí£¬Í¬Ê±¶ÔÌÚÑ¶ÔÆ
Service Mesh ºóÐøÖØµã̽Ë÷µÄ¼¼Êõ·½°¸½øÐмòÒª²ûÊö¡£
ÌÚÑ¶ÔÆ Service Mesh ºËÐļ¼ÊõʵÏÖ
ÌÚÑ¶ÔÆ Service Mesh£¬×ñÑ Service Mesh µÄÀíÄî½øÐÐÉè¼Æ£¬ÎªÓ¦ÓÃÌṩ·þÎñ×Ô¶¯×¢²á·¢ÏÖ¡¢»Ò¶È·ÓÉ¡¢ÏÞÁ÷¡¢È۶ϵȷþÎñÖÎÀíÄÜÁ¦£¬ÇÒÓ¦ÓÃÎÞÐè¶ÔÔ´Âë½øÐÐÇÖÈëʽ±ä¸ü¼´¿ÉÓë¸Ã·þÎñ¿ò¼Ü½øÐм¯³É¡£
ÔÚʵÏÖÉÏ£¬»ùÓÚÒµ½ç´ïµ½ÉÌÓñê×¼µÄ¿ªÔ´Èí¼þ Istio¡¢envoy ½øÐй¹½¨¡£ÕûÌå¼Ü¹¹ÉÏ£¬´Ó¹¦ÄÜÂß¼ÉÏ·ÖΪÊý¾ÝÃæºÍ¿ØÖÆÃ棺
¿ØÖÆÃæÖ÷ÒªÌṩÅäÖü°¿ØÖÆÖ¸ÁîÖ§³Å sidecar µÄÕý³£ÔËÐУ¬ÒÔ¼°¶Ô·þÎñÔËÐйý³ÌÖеÄÏà¹ØÊý¾Ý½øÐвɼ¯¡£Êý¾ÝÃæÖ÷ÒªÊÇÌṩͨÐÅ´úÀí£¨sidecar£©À´½øÐÐ͸Ã÷µÄ·þÎñµ÷Óã¬Ö§³ÅÕý³£µÄÒµÎñÁ÷³Ì¡£

½ÓÏÂÀ´£¬ÈÃÎÒÃǶÔÌÚÑ¶ÔÆ Service Mesh ¸÷¹Ø¼üÓÅ»¯µã×öÏêϸµÄÃèÊö¡£
½âñî k8s£¬Óµ±§ÆäËû¼ÆËãÆ½Ì¨
ÖÚËùÖÜÖª£¬Istio Ç¿ÒÀÀµÓÚ Kubernetes £¬´ó²¿·Ö¹¦Äܶ¼ÒÀÍÐÓÚ Kubernetes ƽ̨½øÐй¹½¨¡£ÏÂÃæÁоټ¸¸öºËÐĵŦÄÜ£º
(1) ·þÎñÅäÖùÜÀí£º Istio ÅäÖÃͨ¹ý Kubernetes Crd (custom resources
definition) ÒÔ¼° configmap ½øÐдæÈ¡

(2) ·þÎñ·¢ÏÖ¼°½¡¿µ¼ì²é£º
Istio È«¹¦ÄܵķþÎñ×¢²á·¢ÏÖÄÜÁ¦ÊÇ»ùÓÚ Kubernetes µÄ PodServices ÄÜÁ¦ÒÔ¼°
Endpoints »úÖÆÊµÏֵģ¬½Úµã½¡¿µ¼ì²éÄÜÁ¦»ùÓÚ ReadinessProbe »úÖÆÊµÏÖ £¨µ±Ç°ÉçÇøÉÏÃæÒ²ÓлùÓÚ
Consul µÄ·þÎñ·¢ÏÖ»úÖÆÊµÏÖ£¬µ«ÊÇȱʧ½¡¿µ¼ì²é»úÖÆ£©¡£

µ«Êµ¼ÊÂ䵨¹ý³ÌÖУ¬TSF µÄÓû§²¢·ÇÈ«²¿ÊÇ Kubernetes Óû§£¬ÀýÈ繫˾ÄÚ²¿µÄÒ»¸öÒµÎñÒòÀúÊ·ÒÅÁôÎÊÌ⣬²»ÄÜÍêÈ«ÈÝÆ÷»¯²¿Êð£¬Í¬Ê±´æÔÚ
VM ºÍÈÝÆ÷»·¾³£¬¼Ü¹¹ÈçÏ£º

´ÓÒµÎñ¼Ü¹¹Í¼¿ÉÒÔ¿´³ö£¬ÒµÎñÒªÇó TSF ¿ÉÒÔÖ§³ÖÆä²¿ÊðÔÚ×ÔÑÐ PAAS ÒÔ¼° Kubernetes
µÄÈÝÆ÷¡¢ÐéÄâ»úÒÔ¼°Âã½ðÊôµÄ·þÎñ¶¼¿ÉÒÔͨ¹ý Service Mesh ½øÐÐÏ໥·ÃÎÊ¡£
Òò´Ë£¬ÎªÁËʵÏÖ¶àÆ½Ì¨µÄ²¿Ê𣬱ØÐëÓë Kubernetes ½øÐнâñî¡£¾¹ý·ÖÎö·¢ÏÖ£¬ÍÑÀë Kubernetes
ºó£¬Istio ´æÔÚÒÔÏÂÈý¸öÎÊÌ⣺
(1)Pilot/Mixer µÄÔ¶³Ì¶¯Ì¬ÅäÖÃÄÜÁ¦²»¿ÉÓã¨Ö»ÄÜÓñ¾µØÅäÖã©
(2)Pilot ÎÞ·¨»ñÈ¡·þÎñ½Úµã½¡¿µÐÅÏ¢
(3) ÎÞ·¨Í¨¹ý Istioctl£¨Istio С¹¤¾ß£©½øÐзþÎñ×¢²á / ·´×¢²áÒÔ¼°Ð´ÅäÖÃÄÜÁ¦Õë¶ÔÕâ
3 ¸öÎÊÌ⣬TSF ÍÅ¶Ó¶Ô Istio µÄÄÜÁ¦½øÐÐÁËÀ©Õ¹ºÍÔöÇ¿£¬ÔöÇ¿ºóµÄ¼Ü¹¹ÈçÏ£º

ϱí¸üÏêϸµÄÃèÊöÁË´æÔÚµÄÎÊÌâ¡¢½â¾ö·½°¸ÒÔ¼°ËùµÃµ½µÄÄ¿µÄ£¬Í¬Ê± TSF ÍŶÓʵÏÖÁË Istio ¶Ô
Consul µÄÍêÕûÊÊÅä¡£

¾¹ý¸ÄÔìºó£¬Service Mesh ³É¹¦Óë Kubernetes ƽ̨½âñ×éÍø±äµÃ¸ü¼Ó¼ò½à£¬Í¨¹ý
REST API ¿ÉÒÔ¶ÔÊý¾ÝÃæ½øÐÐÈ«·½Î»µÄ¿ØÖÆ£¬¿É´ÓÈÝÊÊÅäÈκεĵײ㲿Êð»·¾³£¬¶ÔÓÚ˽ÓÐÔÆ¿Í»§¿ÉÒÔÌṩ¸üºÃµÄÌåÑé¡£
·þÎñѰַģʽµÄÑݽø
½â¾öÁË¿çÆ½Ì¨²¿ÊðÎÊÌâºó£¬µÚ¶þ¸öÃæÁÙµÄÎÊÌâ¾ÍÊÇ·þÎñµÄѰַ»¥Í¨ÎÊÌâ¡£
Istio ϵÄÓ¦ÓÃʹÓà FQDN£¨fully qualified domain name£©½øÐÐÏ໥µ÷Ó㬻ùÓÚ
FQDN µÄѰַÒÀÀµ DNS ·þÎñÆ÷£¬Istio ¹Ù·½¶Ô DNS ·þÎñÆ÷µÄ˵Ã÷ÈçÏ£º

Istio µÄ¹Ù·½ demo£¨https://Istio.io/docs/examples/bookinfo/£©ÖУ¬Reviews
Óë Ratings Ö®¼äµÄÍêÕûµÄ·þÎñµ÷ÓûᾹýÒÔϹý³Ì£º

´ÓͼÉÏ¿ÉÒÔ¿´³ö£¬Reviews ºÍ Ratings µÄ»¥Í¨£¬kube-dns Ö÷ҪʵÏÖ 2 ¸ö¹¦ÄÜ£º
(1) Ó¦ÓóÌÐòµÄ DNS ÇëÇó±» kube-dns ½Ó¹Ü
(2)kube-dns ¿ÉÒÔ½«·þÎñÃû½âÎö³É¿É±» iptables ½Ó¹ÜµÄÐéÄâ IP£¨clusterIP£©
ÔÚ˽ÓÐÔÆµÄʵ¼Ê½»¸¶ÖУ¬¿Í»§µÄÉú²ú»·¾³²»Ò»¶¨°üº¬ Kubernetes »òÕß kube-dns£¬ÎÒÃÇÐèÒªÁíÍâѰÕÒÒ»ÖÖ»úÖÆÀ´ÊµÏÖÉÏÃæµÄÁ½¸ö¹¦ÄÜ¡£
ÔÚ DNS Ñ¡ÐÍÖУ¬Óм¯ÖÐʽºÍ·Ö²¼Ê½Á½ÖÖ·½°¸£¬·Ö±ðÈçÏ£º
¼¯ÖÐʽ DNS£º´ú±íÓÐ ConsulDNS, CoreDNS µÈ£¬Í¨¹ýÄÚÖûúÖÆ»òÕß²å¼þµÄ·½Ê½£¬ÊµÏÖÓë·þÎñ×¢²áÖÐÐĽøÐÐÊý¾Ýͬ²½¡£Æä¼Ü¹¹×éÍøÈçÏ£¬

kube-dns Ò²ÊôÓÚ¼¯ÖÐʽ DNS µÄÒ»ÖÖ£¬¼¯ÖÐʽ DNS ´æÔÚÒÔÏÂÎÊÌ⣺×éÍøÖжîÍâÔö¼ÓÒ»Ì×
DNS ¼¯Èº£¬²¢ÇÒÒ»µ© DNS Server ¼¯Èº²»¿É·þÎñ£¬ËùÓÐÊý¾ÝÃæ½ÚµãÔÚ DNS »º´æÊ§Ð§ºó¶¼ÎÞ·¨¹¤×÷£¬Òò´ËÐèҪΪ
DNS Server ¿¼ÂǸ߿ÉÓÃÉõÖÁÈÝÔÖµÈһϵÁкóÐøÐèÇ󣬻ᵼÖºóÆÚÔËά³É±¾Ôö¼Ó¡£
·Ö²¼Ê½ DNS£º¾ÍÊǽ«·þÎñ DNS µÄÄÜÁ¦Ï³Áµ½Êý¾ÝÆ½ÃæÖУ¬Æä¼Ü¹¹×éÍøÈçÏ£º

·Ö²¼Ê½ DNS ÔËÐÐÔÚÊý¾ÝÃæ½ÚµãÉÏ£¬DNS ÎÞµ¥µã¹ÊÕÏ£¬ÎÞÐ迼ÂǼ¯ÈºÈÝÔÖµÈÒªËØ£¬Ö»ÐèÒªÓлúÖÆ¿ÉÒÔÔÚÆä
down µôºóÖØÐÂÀÆð¼´¿É¡£µ«ÊÇ£¬ÓÉÓÚÆäÓëÒµÎñ½ø³ÌÔËÐÐÔÚͬһ½Úµã£¬Òò´ËÆä×ÊÔ´Õ¼ÓÃÂʱØÐë¿ØÖÆµÃ×ã¹»µÍ£¬²Å²»»á¶ÔÒµÎñ½ø³Ì²úÉúÓ°Ïì¡£
×ۺϿ¼ÂÇ£¬×îÖÕÑ¡ÓÃÁË·Ö²¼Ê½ DNS µÄ·½°¸£¬×ʼÍŶӲÉÓöÀÁ¢½ø³Ì×÷Ϊ DNS Server µÄ·½°¸£¬ÈçÏÂͼ

¸Ã·½°¸ÐÂÔö¼àÌýÔÚ 127.0.0.1:53 É쵀 mesh-dns ½ø³Ì£¬¸Ã½ø³Ìʵʱ´Ó Pilot
ͬ²½·þÎñÁÐ±í¡£Mesh-dns ÔÚ½ÚµãÆô¶¯Ê±½« 127.0.0.1 дÈëµ½ /etc/resolv.conf
Ê×ÐÐÖУ¬Í¬Ê±½Ó¹Ü /etc/resolv.conf µÄÆäËû nameserver¡£ÕâÑù£¬µ± app
·¢Æð DNS ²éѯʱ£¬DNS ÇëÇóÊ×ÏȻᵽ´ï mesh-dns£¬Óöµ½Æ¥Åä·þÎñÃûµÄ²éѯÔòÖ±½Ó·µ»Ø£¬¶øµ±Óöµ½²»ÊÇÕë¶Ô·þÎñÃûµÄ
DNS ²éѯʱ£¬¾Í°Ñ DNS ÇëÇóת·¢¸øÆäËû nameserver ½øÐд¦Àí¡£
¸Ã·½°¸¿´ÆðÀ´¼òµ¥¿ÉÐУ¬µ«ÊǾ²âÊÔÑéÖ¤ºó·¢ÏÖ´æÔÚÒÔÏÂÎÊÌ⣺
(1)resolv.conf ÐÞ¸Äʱ¼ä²îÎÊÌ⣺¸Ã·½°¸ÐèÒª¶Ô /etc/resolv.conf ½øÐÐÐ޸ģ¬ÔÚ
linux »·¾³£¬ÓòÃû½âÎö»úÖÆÊÇͨ¹ý glibc ÌṩµÄ¡£¶ø glibc 2.26 ֮ǰµÄ°æ±¾Óиö
BUG£¬µ¼Ö¼ÙÈçÔÚ½ø³ÌÆô¶¯ºó£¬¶Ô resolv.conf ¾ÍÐÐÐ޸ģ¬Ôò¸ÃÐÞ¸ÄÎÞ·¨±»¸Ã½ø³Ì¸ÐÖª£¬Ö±µ½½ø³ÌÖØÆô¡£¶øÓÉÓÚÔÚÈÝÆ÷²¿ÊðµÄ³¡¾°ÖУ¬mesh-dns
ºÍÓ¦Ó÷ֱð²¿ÊðÔÚͬһ¸ö POD µÄ²»Í¬ÈÝÆ÷ÖУ¬ÈÝÆ÷µÄÆô¶¯ÊÇÏ໥¶ÀÁ¢µÄ£¬ËùÒÔÎÞ·¨±£Ö¤¶Ô resolv.conf
µÄÐÞ¸ÄÒ»¶¨ÔÚÓ¦ÓÃÆô¶¯Ç°¡£¼´Ê¹¸Ä³Éͨ¹ý InitContainer ½øÐÐÐ޸쬵±ÈÝÆ÷Òì³£ÖØÆôºó£¬resolv.conf
ҲͬÑù»á±»»¹Ôµ¼Ö·þÎñ²»¿ÉÓá£
(2) ¶Ë¿Ú¼àÌý³åÍ»ÎÊÌ⣺ÓÉÓÚ mesh-dns ±ØÐë¼àÌý 53 ¶Ë¿Ú£¬¼ÙÈç¿Í»§½Úµã»·¾³ÒѾ°²×°ÁË
dnsmasq µÈͬÑùÐèÒªÕ¼Óà 53 µÄ½ø³Ì£¬Ôò¿ÉÄÜ»á³öÏֶ˿ڳåÍ»µ¼ÖÂÆô¶¯Ê§°Ü¡£
(3)nameserver Ñ¡Ôñ²ßÂÔÎÊÌ⣺¼ÙÈç´æÔÚ¶à¸ö nameserver£¬²¿·Ö²Ù×÷ϵͳ£¬Ä¬ÈÏ»áʹÓÃ
rotate£¨Ëæ»úѡȡһ¸ö×÷ΪÊ×Ñ¡²éѯµÄ nameserver£©×÷Ϊ nameserver µÄÑ¡Ôñ²ßÂÔ¡£´Ëʱ»á³öÏÖÒ»¶¨¸ÅÂÊÏ»áÑ¡²»µ½
127.0.0.1 µÄ nameserver£¬´Ó¶øµ¼Ö·þÎñÓòÃû½âÊÍʧ°Ü¡£
Õë¶ÔÉÏÊöÎÊÌ⣬¶Ô·½°¸½øÐÐÁ˽øÒ»²½µÄÓÅ»¯£¬ÓÅ»¯ºóµÄ·½°¸ÈçÏÂͼ£º

mesh-dns ²»ÔÙ¼àÌý 53 ¶Ë¿Ú£¬¶øÊǼàÌýÔÚ 5353 ¶Ë¿Ú£¨¿ÉÅäÖã©£¬Æô¶¯Ê±ÎÞÐèÐÞ¸Ä resolv.conf¡£Í¨¹ýÔö¼Ó
iptables ¹æÔò£¬½«ËùÓз¢Íù nameserver µÄÁ÷Á¿µ¼Èëµ½ mesh-dns£¬´Ó¶ø½â¾öÁËÉÏÎÄÖеġ°¶Ë¿Ú¼àÌý³åÍ»¡±ÒÔ¼°¡°nameserver
Ñ¡Ôñ²ßÂÔ¡±µÄÎÊÌâ¡£
mesh-dns ͨ¹ý inotify ¼àÌý /etc/resolv.conf£¬¿ÉÒÔËæÊ±»ñÈ¡»·¾³ÖÐ
dns ÅäÖõĸü¸Ä£¬´Ó¶ø½â¾öÁËÉÏÎÄÖеġ°resolv.conf ÐÞ¸Äʱ¼ä²î¡±µÄÎÊÌâ¡£
Óë·Ç Service Mesh ·þÎñµÄ»¥Í¨
ÏÖʵ×ÜÊǸ´Ôӵģ¬Ç°Ãæ½â¾ö mesh ·þÎñÖ®¼äÏ໥·ÃÎʵÄÎÊÌ⣬ÈçºÎ½â¾öÓû§ Service Mesh
Ó¦ÓÃºÍÆäËû·Ç Mesh Ó¦ÓõÄÏ໥·ÃÎÊÄØ£¿ Óû§ÄÚ²¿Óв»Í¬¼¼ÊõÕ»£¬Ò»²¿·Ö·þÎñ»ùÓÚ service mesh
½øÐÐʵÏÖ·þÎñ£¬ÁíÍâÒ»²¿·Ö·þÎñ»ùÓÚ spring cloud ¿ò¼Ü½øÐÐʵÏÖ¡£Í¬Ê±£¬¿Í»§µÄ΢·þÎñ×éÍøÖУ¬´æÔÚ´óÁ¿µÚÈý·½·þÎñÈçÖ§¸¶Íø¹Ø¡¢·Ö²¼Ê½´æ´¢¡¢É豸µÈ£¬Î¢·þÎñÐèÒªÓëÕâЩµÚÈý·½·þÎñÒ²´æÔÚ½»»¥¡£Óû§ÆÚÍûÖ§³ÖµÄ¼Ü¹¹ÈçÏÂͼËùʾ£º

Õâ¸ö¼Ü¹¹ÖУ¬×î´óµÄÌôÕ½ÔÚÓÚÉæ¼°ÁËÁ½¸ö²»Í¬µÄ΢·þÎñ¿ò¼ÜÖ®¼äµÄ»¥Í¨¡£µ«ÊÇ£¬ÕâÁ½¸ö΢·þÎñ¿ò¼Ü´Ó¼Ü¹¹Ä£Ê½¡¢¸ÅÄîÄ£ÐÍ¡¢¹¦ÄÜÂß¼ÉÏ£¬¶¼´æÔڽϴóµÄ²îÒ졣ΨһÏàͨµÄµã£¬¾ÍÊÇËûÃǶ¼ÊÇ΢·þÎñ¿ò¼Ü£¬¿ÉÒÔ½«Ó¦ÓõÄÄÜÁ¦Í¨¹ý·þÎñµÄÐÎʽÌṩ³öÀ´£¬¸øÏû·ÑÕßµ÷Óã¬Ïû·ÑÕßʵ¼ÊÉϲ¢²»¸ÐÖª·þÎñµÄ¾ßÌåʵÏÖ¡£
»ùÓÚÕâ¸ö¹²Í¨µã£¬ÎªÁËʹµÃ²»Í¬¿ò¼Ü¿ª·¢µÄ·þÎñÄܹ»Õý³£¹¤×÷£¬TSF ÍŶÓ×öÁË´óÁ¿µÄ¿ª·¢¹¤×÷£¬½«Á½¸ö΢·þÎñ¿ò¼Ü£¬´Ó²¿Êðģʽ¡¢·þÎñ¼°¹¦ÄÜÄ£ÐÍÉϽøÐÐÁËÀͨ£¬Ö÷Òª°üÀ¨Èçϼ¸µã£º
(1) ·þÎñÄ£Ð͵Ļ¥Í¨£º»ùÓÚͳһµÄ·þÎñÔªÊý¾ÝÄ£ÐÍ£¬Õë¶Ô pilot registry ¼° spring
cloud registry µÄ·þÎñ×¢²á·¢ÏÖ»úÖÆ½øÐÐÀͨ
(2) ·þÎñ API µÄ»¥Í¨£º»ùÓÚ±ê×¼ API Ä£ÐÍ£¨OpenAPI v3£©£¬Õë¶ÔÁ½±ß¿ò¼ÜµÄ API
¼¶±ð·þÎñÖÎÀíÄÜÁ¦½øÐÐÀͨ
(3) ·þÎñ·ÓÉÄÜÁ¦»¥Í¨£º»ùÓÚ±ê×¼È¨ÖØËã·¨ÒÔ¼°±êǩģÐÍ£¬Õë¶Ô pilot virtual-service
ÒÔ¼° spring cloud ribbon ÄÜÁ¦½øÐÐÀͨ¡£
(4) ·þÎñÏÞÁ÷ÄÜÁ¦»¥Í¨£º»ùÓÚ±ê×¼ÁîÅÆÍ°¼Ü¹¹ºÍÄ£ÐÍ£¬ÒÔ¼°Ìõ¼þÆ¥Å乿Ôò£¬¶Ô mixer ¼° spring
cloud ratelimiter ÄÜÁ¦½øÐÐÀͨ¡£
´úÀíµ¥½Úµã¶à·þÎñ
Óû§µÄÐèÇóÊǶàÖÖ¶àÑùµÄ£¬ÔÚ½»¸¶¹ý³ÌÖдæÔÚÈç϶à·þÎñ³¡¾°£º
(1) ¿Í»§»úÆ÷×ÊÔ´²»×㣬ÇÒûÓÐ×öÈÝÆ÷»¯£¬Òò´ËÐèÒª°Ñ¶à¸ö·þÎñ²¿Êðµ½Ò»¸ö½ÚµãÉÏ¡£
(2) ¿Í»§µÄ´«Í³Ó¦ÓÃʹÓà OSGI£¨Ò»ÖÖ Java Ä£¿é»¯¼¼Êõ£©ÊµÏÖ£¬Ò»¸ö½ø³ÌÖаüº¬¶à¸ö·þÎñ£¬¼àÌýÔÚͬһ¸ö¶Ë¿Ú¡£

ΪÁËÖ§³Ö¶à·þÎñ³¡¾°£¬¼ò»¯Óû§µÄʹÓÃÁ÷³Ì£¬TSF ÌṩÁË·þÎñÃèÊöÎļþ£¬¿ÉÖ§³Ö¶à·þÎñ³¡¾°£¬·þÎñÅäÖÃÎļþÓë
Kubernetes ±ê×¼¸ñʽһÖ£º

pilot-agent »á¸ù¾Ý·þÎñÅäÖ㬰´ÕÕ--µÄ¸ñʽ½«ÅäÖÃÖÐ services ×¢²á³É¶à¸ö¶ÀÁ¢µÄ·þÎñʵÀý¡£
ÔÚ OutBound ·þÎñ·ÓÉʱ£¬¿ÉÒÔͨ¹ý LDS->RDS->CDS->EDS
µÄ·½Ê½½øÐзÓÉ£¬ºÍ¶ÀÁ¢²¿ÊðµÄ·þÎñûÓÐÇø±ð£º

È»¶ø£¬ÔÚ InBound ·þÎñ·Óɹý³ÌÖУ¬Í¨¹ý¿ªÔ´ Istio Éú³ÉµÄ listener »áÓöµ½Ò»Ð©¿Ó¡£
¶ÔÓÚ¶à·þÎñ¼àÌýͬһ¶Ë¿ÚµÄ³¡¾°£¬¿ªÔ´ Istio ÔÚÉú³É inbound µÄʱºò£¬»á½«Í¬ IP+Port
µÄÆäÖÐÒ»¸ö·þÎñ¸ø reject µô

Òò´Ë£¬Éú³ÉµÄ LDS ÖУ¬Ö»ÓÐÆäÖÐÒ»¸ö·þÎñµÄÏà¹ØÂ·ÓÉÐÅÏ¢£º

ÕâÑùÒ»À´£¬ÆÕͨÏûϢͶµÝ£¬²»»áÓÐʲôÎÊÌ⣨Ŀ±ê¶ËµãÐÅÏ¢ÊÇÒ»Öµģ©£¬µ«ÊǼÙÈçÐèÒªÓë mixer ½áºÏ£¬×ö
api ¼øÈ¨»òÕßÏÞÁ÷µÈ²Ù×÷£¬Ôò»á³öÏÖÁ½¸ö·þÎñµÄ mixer_attribute »¥Ïà»ìÏýµÄÇé¿ö£¬µ¼Ö¹¦Äܲ»¿ÉÓá£
ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÍŶӷÖÎöÁË envoy µÄ filter_chain_match ÄÜÁ¦£¨https://www.envoyproxy.io/docs/envoy/v1.8.0/api-v2/api/v2/listener/listener.proto.html?highlight=filter_chain_match#envoy-api-msg-listener-filterchainmatch£©£¬¶Ô
pilot ½øÐиÄÔ죬À©Õ¹ÁË listener ÄÜÁ¦£¬Í¨¹ý server_name À´·ÖÁ÷Êý¾Ý°üµ½²»Í¬µÄ
filter ÖС£
×îÖÕÉú³ÉµÄ LDS ÈçÏ£º

¾¹ýÕâÑùµÄ¸ÄÔ죬ͬһ¶Ë¿ÚÉÏ£¬²»Í¬µÄ·þÎñµÄ filter ÅäÖò»ÔÙ³åÍ»£¬Á½¸ö·þÎñµÄ mixer_attribute
Ò²ÄÜÏ໥¸ôÀ룬˳ÀûÖ§³Öͬ¶Ë¿Ú¶à·þÎñµÄ³¡¾°¡£
¶þ½øÖÆÐÒéµÄÖ§³Ö
ÔÚµ±Ç°Òµ½çµÄ¿ªÔ´ Service Mesh ²úÆ·ÖУ¬Ö÷´òµÄÐÒé¶¼ÊDZê×¼ÐÒ飨HTTP1/2, GRPC£©£¬±ê×¼ÐÒé¶¼ÓÐÒ»¸öÌØµã£¬ÄǾÍÊÇÐÒéÍ·Öаüº¬ÁËÄ¿µÄ¶ËÏà¹ØµÄËùÓÐÐÅÏ¢£¬Service
Mesh »á¸ù¾ÝÕâЩÐÅÏ¢½øÐзÓÉ¡£ÈçϱíËùʾ£º

¶ÔÓÚÆäËû¶þ½øÖÆÐÒ飬Ôò·ÖΪ 2 ´óÀࣺ
µÚÒ»ÖÖÊÇÐÒéÖдøÓÐÄ¿±ê¶ËÐÅÏ¢µÄ¶þ½øÖÆÐÒ飬Èç thrift£¬dubbo µÈ£»
µÚ¶þÖÖÊÇÐÒéÖв»´øÓÐÄ¿±ê¶ËÐÅÏ¢µÄ¶þ½øÖÆÐÒ飬ÕâÖ־ͱȽ϶àÁË£¬Ò»°ã³£¼ûÓÚ˽ÓÐÔÆÖеĸ÷ÖÖ˽ÓÐͨÐÅÐÒé¡£
¿ªÔ´ Istio ÖУ¬¶ÔÓÚ¶þ½øÖÆÐÒéµÄÖ§³Ö£¬½ö½ö¾ÖÏÞÓÚËIJãµÄ¶Ë¿Úת·¢£¬Ò»°ãÓÃÓÚ¼¯³ÉÍⲿ·þÎñ£¨mysql,
mongodb µÈ£©£¬µäÐͳ¡¾°ÊǶԲ»Í¬Èë¿ÚµÄÁ÷Á¿×öת·¢£¬ÈçÏÂͼËùʾ£º

µ¥´¿µÄËIJãת·¢£¬ÎÞ·¨Âú×㸴ÔÓµÄ΢·þÎñ·ÓɵÄÐèÇó¡£µ±Ç° TSF ½»¸¶µÄ¿Í»§ÖУ¬¶à¸ö¿Í»§¶¼Ìá³öÁËÐèÒªÖ§³Ö˽ÓÐÐÒé·ÓɵÄÐèÇó£¬Òò´Ë£¬Õë¶ÔÕâ¸öÎÊÌ⣬TSF
ÍŶÓÌṩÁËÁ½ÖÖ½â¾ö·½°¸¡£
(1) Óû§½«Ë½ÓÐÐÒéת»»³É GRPC ÐÒ飬½ÓÈëµ½ Service Mesh

ÓÉÓÚ GRPC µÄ Data Frame ±¾Éí´«ÊäµÄ¾Í¿ÉÒÔÊÇ TCP ÐÒ飬Òò´ËÓû§¿ÉÒÔÖ±½Ó°Ñ×Ô¼ºµÄ¶þ½øÖÆÐÒéͨ¹ý
GRPC µÄ bytes ÀàÐͱàÂ룬Ȼºóͨ¹ý Data Frame ´«Êä¹ýÀ´.
¸Ã·½°¸ÊÊÓÃÓÚ±¾ÉíÓÐÒ»¶¨µÄ¼¼Êõ»ýÀÛ£¬Ô¸ÒâÈ¥×ö GRPC ¸ÄÔìµÄÓû§
(2) ¸ù¾ÝÓû§¶¨ÒåµÄÐÒéÍ·ÃèÊöÎļþ£¬½øÐÐ˽ÓÐÐÒéÆß²ã·ÓÉ
Öмä¼þÍÅ¶Ó¶Ô envoy µÄ filter ½øÐÐÁËÀ©Õ¹£¬Óû§Ìṩһ¸ö protobuf ¸ñʽµÄÃèÊöÎļþ£¬Ö¸¶¨ÐÒéÍ·µÄ×Ö¶Î˳Ðò£¬proxy
¸ù¾ÝÃèÊöÎļþµÄ¶¨Ò壬½øÐÐÏûϢͷµÄ½ÓÊÕ¼°½âÎö£¬È»ºó¸ù¾Ý½âÎöºóµÄÏûϢͷÄÚÈÝ£¬½øÐÐÆß²ã·ÓɺÍת·¢¡£

¸Ã·½°¸ÊÊÓÃÓÚ×ÔÉí´øÓÐÄ¿±ê¶ËÐÅÏ¢µÄ¶þ½øÖÆÐÒ飬¿ÉÒÔÈÃ˽ÓÐÐÒéµÄÓû§ÎÞÐèÈκεĸÄÔ죬¼´¿É½ÓÈë Service
Mesh¡£
×Ü ½á
ÌÚÑ¶ÔÆ Service Mesh µ±Ç°Í¨¹ý TSF ƽ̨ÔÚ³ÖÐø½»¸¶ÖУ¬ÉÏÎÄÖ÷ÒªÕë¶ÔÂ䵨¹ý³ÌÖÐÓöµ½µÄµäÐ͹¦ÄÜÐÔÐèÇó¼°¼¼Êõ·½°¸Ñݽø½øÐÐÁË×ܽá½éÉÜ£¬³ý´ËÖ®Í⣬Öмä¼þÍŶÓÔÚ
Service Mesh ÐÔÄÜ·½ÃæÒ²ÓкܶàÓÅ»¯ºÍ̽Ë÷£¬Ö÷Òª°üÀ¨¼õÉÙ envoy ºÍ mixer Ö®¼äµÄÍøÂç½»»¥¡¢ÓÅ»¯Êý¾Ý°üÔÚ
envoy ½ÚµãÄÚ²¿´ÓÄÚºË̬µ½Óû§Ì¬µÄ¿½±´´ÎÊý¡¢envoy µ½ envoy Ö®¼äÊý¾ÝµÄת·¢ÐÔÄܵȣ¬ºóÐø½«Õë¶ÔÐÔÄÜÓÅ»¯½øÐÐרÏî·ÖÏí¡£ |