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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓÃIstioÖÎÀí΢·þÎñÈëÃÅ
 
  2517  次浏览      29
 2019-9-17
 
±à¼­ÍƼö:

±¾ÎÄÀ´×Ô²©¿ÍÔ°£¬±¾ÎĽéÉÜ΢·þÎñµÄ¡°Í´µã¡±£¬ÒÔ¼°ÎÒÃǽ«´øÁì´ó¼Ò¸ÐÐÔµÄÈÏʶһÏÂIstio£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£

½üÁ½Äê΢·þÎñ¼Ü¹¹Á÷ÐУ¬Ö÷Á÷»¥ÁªÍø³§ÉÌÄÚ²¿¶¼ÒѾ­Î¢·þÎñ»¯£¬³õ´´ÆóÒµËäÈ»¼¼Êõ»ýµí²»ÐУ¬µ«Ò²Í¨¹ý¸÷ÖÖ¿ªÔ´¹¤¾ßÓµ±§Î¢·þÎñ¡£ÔÙ¼ÓÉÏÈÝÆ÷¼¼Êõ¸³ÄÜ£¬KubernetesÓÖÌíÁËÒ»°Ñ»ð£¬Î¢·þÎñ¼Ü¹¹ÒÑÈ»³ÉΪµ±Ç°Èí¼þ¼Ü¹¹Éè¼ÆµÄÊ×Ñ¡¡£

µ«Î¢·þÎñ»¯Ò×Ū£¬·þÎñÖÎÀíÄѸ㣡

Ò»¡¢Î¢·þÎñµÄ¡°Í´µã¡±

΢·þÎñ»¯Ã»ÓÐͳһ±ê×¼£¬¶àÊýÊǽøÐÐÒµÎñÁìÓò´¹Ö±Çз֣¬ÒµÎñ°´Ò»¶¨µÄÁ£¶È»®·ÖÖ°Ô𣬲¢ÐγÉÇåÎú¡¢Ö°Ôðµ¥Ò»µÄ·þÎñ½Ó¿Ú£¬ÕâÑùÿһ¿é¹æ»®ÎªÒ»¸ö΢·þÎñ¡£Î¢·þÎñÖ®¼äµÄͨÐÅ·½°¸Ïà¶Ô³ÉÊ죬¿ªÔ´ÁìÓòÑ¡Ôñ½Ï¶àµÄÓÐRPC»òRESTful API·½°¸£¬±ÈÈ磺gRPC¡¢Apache ThriftµÈ¡£ÕâЩ·½°¸¶àÆ«ÖØÓÚÊý¾ÝÈçºÎ´ò°ü¡¢´«ÊäÓë½â°ü£¬¶Ô·þÎñÖÎÀíµÄÄÚÈÝÉæ¼°ÉõÉÙ¡£

΢·þÎñÖÎÀíÊÇÍ·ÌÛµÄÊ£¬Ò²ÊÇ΢·þÎñ¼Ü¹¹ÖеÄÍ´µã¡£ÖÎÀíÕâ¸ö´ÊÓжàÔªº¬Ò壬ºÜÄÑÏ´ïÒ»¸ö¾«È·¶¨Ò壬ÕâÀï¿ÉÒÔÏñСѧ¶þÄ꼶ѧÉúÄÇÑùÁгöÖÎÀíµÄÖî¶à½üÒå´Ê£º¹ÜÀí¡¢¿ØÖÆ¡¢¹æÔò¡¢Õƿء¢¼à¶½¡¢Ö§Åä¡¢¹æ¶¨¡¢Í³Öεȡ£¶ÔÓÚ΢·þÎñ¶øÑÔ£¬ÖÎÀíÌåÏÖÔÚÒÔÏÂÖî¶à·½Ã棺

·þÎñ×¢²áÓë·¢ÏÖ

Éí·ÝÑéÖ¤ÓëÊÚȨ

·þÎñµÄÉìËõ¿ØÖÆ

·´Ïò´úÀíÓë¸ºÔØ¾ùºâ

·ÓÉ¿ØÖÆ

Á÷Á¿Çл»

ÈÕÖ¾¹ÜÀí

ÐÔÄܶÈÁ¿¡¢¼à¿ØÓëµ÷ÓÅ

·Ö²¼Ê½¸ú×Ù

¹ýÔØ±£»¤

·þÎñ½µ¼¶

·þÎñ²¿ÊðÓë°æ±¾Éý¼¶²ßÂÔÖ§³Ö

´íÎó´¦Àí

¡­¡­

´Ó΢·þÎñÖÎÀí½Ç¶ÈÀ´Ëµ£¬Î¢·þÎñÆäʵÊÇÒ»¸ö¡°´óϵͳ¡±£¬ÒªÏ뽫Õâ¸ö´óϵͳȫ²¿Â䵨£¬¾ø·ÇÒ×Ê£¬ÓÈÆäÊÇ֮ǰÉÐûÓÐÒ»ÖÖÌØ±ðÓÅÑŵļ¼Êõ·½°¸¡£¶àÊý·½°¸£¨±ÈÈ磺Dubbo¡¢go-kitµÈ£©¶¼»ò¶à»òÉٵضÔÓ¦ÓÃÂß¼­ÓÐÒ»¶¨µÄÇÖÈëÐÔ£¬ÈÃÒµÎñ¿ª·¢ÈËÔ±²»ÄÜÖ»focusµ½ÒµÎñ±¾Éí£¬»¹Òª¹ØÐÄÄÇЩ¡°ÖÎÀí¡±Âß¼­¡£²¢ÇÒÊÐÃæÉÏÄÚÖÃÁË΢·þÎñÖÎÀíÂß¼­µÄ¿ò¼Ü½ÏÉÙ£¬ÇҺܶà±à³ÌÓïÑÔÏà¹Ø¡£ÕâÖÖÇé¿öÏ£¬´ó³§¶àÑ¡Ôñ×ÔÑлò»ùÓÚij¸ö¿ò¼Ü¸ÄÔ죬С³§Ò»°ãÖ»ÄÜ¡°¶«Æ´Î÷´Õ¡±Ò»Ð©¡°°ë³ÉÆ·¡±´ÕºÏ×ÅʹÓ㬾ÍÕâÑù΢·þÎñÒ²×ß¹ýÁËÈô¸ÉÄê¡£

¶þ¡¢Service Meshºá¿Õ³öÊÀ£¬Istio´øÀ´¡°¸£Òô¡±

ÎÒ²»ÖªµÀÔÚûÓÐTCP/IPЭÒéµÄÄê´ú£¬Ö÷»úºÍÖ÷»úÖ®¼äµÄÓ¦ÓÃͨÐÅʱÊÇ·ñÐèÒªÓ¦ÓùØÐĵײãͨÐÅЭÒéʵÏÖÂß¼­¡£µ«ÊǺÍTCP/IPµ®ÉúµÄ˼ÏëÀàËÆ£¬ÔÚ΢·þÎñʹÓöàÄêºó£¬ÈËÃÇ·¢ÏÖÐèÒª¶ÀÁ¢µØ³éÏó³öÒ»²ãÂß¼­ÍøÂ磬רÃÅÓÃÓÚ¡°Î¢·þÎñͨÐÅÓëÖÎÀí²ßÂÔµÄÂ䵨¡±£¬ÈÃÓ¦ÓÃÖ»¹ØÐÄÒµÎñ£¬°Ñ·þÎñÖÎÀíµÄÊÂÇéÈ«²¿½»ÓÉ¡°ÕâÒ»²ã¡±È¥´¦Àí¡£

ͼ 1£º´«Í³Î¢·þÎñÖ®¼äµÄ΢·þÎñÖÎÀíÂß¼­µÄλÖÃ

ͼ 2£ºÎ¢·þÎñÖÎÀíÂß¼­±»¶ÀÁ¢³öÀ´Ö®ºóµÄλÖÃ

ÓÉ¡°Service Govern Logic¡±ÕâÒ»²ã×é³ÉµÄÂß¼­ÍøÂç±»¶¨ÒåΪService Mesh£¬Ã¿¸ö΢·þÎñ¶¼°üº¬Ò»¸öservice meshµÄ¶Ëµã¡£

¡°Service Mesh¡±¸ÅÄ·Ç³£ÄêÇᣬÕâ¸ö´ÊÔÚ¹úÄÚ±»·­ÒëΪ¡°·þÎñÍø¸ñ¡±»ò¡°·þÎñÄöºÏ²ã¡±£¬ÎÒÃÇÕâÀï¾ÍÓÃService MeshÕâ¸öÓ¢ÎÄ´Ê¡£ÕâÀïժ¼һÏÂServiceMeshÖÐÎÄÉçÇøÉϵÄһƪÃûΪ¡¶Äê¶ÈÅ̵ã2017Ö®Service Mesh£ºÈºÐÛÖð¹·éÑÌÆð[1]¡·µÄÎÄÕÂÖжÔService Mesh¸ÅÄîµÄ»Ø¹Ë£ºÔÚ 2016 ÄêÄê³õ£¬¡°Service Mesh¡±»¹Ö»ÊÇ Buoyant ¹«Ë¾µÄÄÚ²¿´Ê»ã£¬¶øÖ®ºó£¬Ëü¿ªÊ¼Öð²½×ßÏòÉçÇø£º2016 Äê 9 Ô 29 ÈÕÔÚ SF Microservices ÉÏ£¬¡°Service Mesh¡±Õâ¸ö´Ê»ãµÚÒ»´ÎÔÚ¹«¿ª³¡ºÏ±»Ê¹Óá£Õâ±êÖ¾×Å¡°Service Mesh¡±Õâ¸ö´Ê£¬´Ó Buoyant ¹«Ë¾×ßÏòÉçÇø¡£2016 Äê 10 Ô£¬Alex Leong ¿ªÊ¼ÔÚ Buoyant ¹«Ë¾µÄ¹Ù·½ Blog ÖÐÁ¬ÔØÏµÁÐÎÄÕ¡°A Service Mesh for Kubernetes¡±¡£Ëæ×Å¡°The Services must Mesh¡±¿ÚºÅµÄº°³ö£¬Buoyant ºÍ Linkerd ¿ªÊ¼ Service Mesh ¸ÅÄîµÄ²¼µÀ¡£2017 Äê 4 Ô 25 ÈÕ£¬William Morgan ·¢²¼²©ÎÄ¡°What¡¯s a Service Mesh? And why do I need one?¡±¡£Õýʽ¸ø Service Mesh ×öÁËÒ»¸öȨÍþ¶¨Òå¡£¶øService MeshÕæÕýÒýÆð´ó¼Ò¹Ø×¢ÒªÔ´ÓÚIstioÏîÄ¿µÄ¿ªÔ´·¢²¼¡£ÎªÊ²Ã´ÄØ£¿¸öÈ˾õµÃ»¹ÊÇÒòΪ¡°µùºÃ¡±£¡IstioÏîÄ¿ÓÉGoogle¡¢IBM¹²Í¬ºÏ×÷´´½¨£¬Lyft¹«Ë¾¹±Ï×ÁËEnvoyÏîÄ¿½«×÷ΪIstio Service MeshµÄdata panel¡£Google¡¢IBMµÄÓ°ÏìÁ¦ÈÃService Mesh¸ÅÄîѸËÙ´«²¥£¬Í¬Ê±Ò²Èôó¼ÒÈÏʶµ½ÁËIstioÏîÄ¿ÔÚService MeshÁìÓòµÄÖØÒªÐÔ£¬ÓÚÊÇ·×·×Ñ¡Ôñ»ý¼«Ö§³Ö²¢½«×Ô¼ºµÄ²úÆ·»òÏîÄ¿ÓëIstioÏîÄ¿¼¯³É¡£

IstioÏîÄ¿ÊÇService Mesh¸ÅÄîµÄ×îÐÂʵÏÖ£¬Ö¼ÔÚËùÓÐÖ÷Á÷¼¯Èº¹ÜÀíÆ½Ì¨ÉÏÌṩService Mesh²ã£¬³õÆÚÒÔʵÏÖKubernetesÉϵķþÎñÖÎÀí²ãΪĿ±ê¡£ËüÓÉ¿ØÖÆÆ½ÃæºÍÊý¾ÝÆ½Ãæ×é³É£¨ÊDz»ÊǸоõºÍSDNµÄÉè¼ÆÀíÄîÏàËÆ°¡£©¡£¿ØÖÆÆ½ÃæÓÉGoÓïÑÔʵÏÖ£¬°üÀ¨Pilot¡¢Mixer¡¢AuthÈý¸ö×é¼þ£»Êý¾ÝÆ½Ãæ¹¦ÄÜÔÝÓÉEnvoyÔÚPodÖÐÒÔSidecarµÄ²¿ÊðÐÎʽÌṩ¡£ÏÂÃæÊǹٷ½µÄ¼Ü¹¹Í¼£º

ͼ 3£ºIstio¼Ü¹¹Í¼£¨À´×Ô¹ÙÍø£©

SidecarÖÐEnvoy´úÀíÁËPodÖÐÕæÕýÒµÎñContainerµÄËùÓнø³öÁ÷Á¿£¬²¢¶ÔÕâЩÁ÷Á¿°´ÕÕ¿ØÖÆÆ½ÃæÉ趨µÄ¡°ÖÎÀíÂß¼­¡±½øÐд¦Àí¡£¶øÕâÒ»ÇжÔPodÖеÄÒµÎñÓ¦ÓÃÊÇ͸Ã÷µÄ£¬¿ª·¢ÈËÔ±¿ÉÒÔרÐÄÓÚÒµÎñÂß¼­£¬¶øÎÞÐèÔÙ¹ØÐÄ΢·þÎñÖÎÀíµÄÂß¼­¡£Istio´ú±íµÄService MeshµÄÉè¼ÆÀíÄî±»ÈÏΪÊÇÏÂÒ»´ú¡°Î¢·þÎñͳһ¿ò¼Ü¡±£¬ÉõÖÁÓÐÈËÈÏΪÊÇ΢·þÎñ¿ò¼ÜÑÝ»¯µÄÖյ㡣

IstioÓÚ2017Äê5ÔÂ24ÈÕ·¢²¼ÁË0.1 release°æ±¾£¬½ØÖÁĿǰΪֹIstioµÄ°æ±¾¸üе½v 0.4.0£¬ÑݽøËÙ¶ÈÏ൱¿ì£¬²»¹ýĿǰÒÀÈ»²»ÒªÓÃÓÚÉú²ú»·¾³£¬ÖÁÉÙÒªµÈµ½1.0°æ±¾·¢²¼°É¡£µ«¶ÔÓÚIstioµÄÔçÆÚ½ÓÄÉÕß¶øÑÔ£¬ÏÖÔÚÕýÊÇÉîÈëÑо¿IstioµÄºÃʱ»ú¡£ÔÚ±¾ÆªµÄ½ÓÏÂÀ´ÄÚÈÝÖУ¬ÎÒÃǽ«´øÁì´ó¼Ò¸ÐÐÔµÄÈÏʶһÏÂIstio£¬Èë¸öÃŶù¡£

Èý¡¢Istio°²×°

IstioĿǰ֧³Ö×îºÃµÄ¾ÍÊÇKubernetesÁË£¬Òò´ËÎÒÃǵÄʵÑé»·¾³¾Í¶¨ÔÚKubernetesÉÏ¡£ÖÁÓÚ°æ±¾£¬Istioµ±Ç°×îа汾Ϊ0.4.0£¬Õâ¸ö°æ±¾¾Ý˵ҪKubernetes 1.7.4¼°ÒÔÉϰ汾ÓÃÆðÀ´²Å²»»á·¢ÉúС벡:)¡£ÎÒµÄKubernetes¼¯ÈºÊÇv1.7.6°æ±¾µÄ£¬Ç¡ºÃÂú×ãÌõ¼þ¡£ÏÂÃæÊǰ²×°¹ý³Ì£º£¨NodeÉϵÄOSÊÇUbuntu 16.04£©

# wget -c https://github.com/istio/istio/releases/
download/
0.4.0/istio-0.4.0-linux.tar.gz
½âѹºó£¬½øÈëistio-0.4.0Ŀ¼£¬
# ls -F
bin/ install/ istio.VERSION LICENSE README.md samples/
# cat istio.VERSION
# DO NOT EDIT THIS FILE MANUALLY instead use
# install/updateVersion.sh (see install/README.md)
export CA_HUB="docker.io/istio"
export CA_TAG="0.4.0"
export MIXER_HUB="docker.io/istio"
export MIXER_TAG="0.4.0"
export PILOT_HUB="docker.io/istio"
export PILOT_TAG="0.4.0"
export ISTIOCTL_URL="https://storage.googleapis.com/
istio-release/releases/0.4.0/istioctl"
export PROXY_TAG="0.4.0"
export ISTIO_NAMESPACE="istio-system"
export AUTH_DEBIAN_URL="https://storage.googleapis.com/
istio-release/releases/0.4.0/deb"
export PILOT_DEBIAN_URL="https://storage.googleapis.com/istio-release/releases/0.4.0/deb"
export PROXY_DEBIAN_URL="https://storage.googleapis.com/istio-release/releases/0.4.0/deb"
export FORTIO_HUB="docker.io/istio"
export FORTIO_TAG="0.4.2"
# cd install/kubernetes
ÎÒÃÇÏȲ»ÓÃauth¹¦ÄÜ£¬Òò´ËʹÓÃistio.yamlÕâ¸öÎļþ½ø
ÐÐIstio×é¼þ°²×°£º
# kubectl apply -f istio.yaml
namespace "istio-system" created
clusterrole "istio-pilot-istio-system" created
clusterrole "istio-initializer-istio-system" created
clusterrole "istio-mixer-istio-system" created
clusterrole "istio-ca-istio-system" created
clusterrole "istio-sidecar-istio-system" created
clusterrolebinding "istio-pilot-admin-role-binding
-istio-system" created
clusterrolebinding "istio-initializer-admin-role
-binding-istio-system" created
clusterrolebinding "istio-ca-role-binding-istio
-system" created
clusterrolebinding "istio-ingress-admin-role
-binding-istio-system" created
clusterrolebinding "istio-sidecar-role-binding
-istio-system" created
clusterrolebinding "istio-mixer-admin-role-
binding-istio-system" created
configmap "istio-mixer" created
service "istio-mixer" created
serviceaccount "istio-mixer-service-account"
created
deployment "istio-mixer" created
customresourcedefinition "rules.config.istio.
io" created
customresourcedefinition "attributemanifests.
config.istio.io" created
... ...
customresourcedefinition "reportnothings.
config.istio.io" created
attributemanifest "istioproxy" created
attributemanifest "kubernetes" created
stdio "handler" created
logentry "accesslog" created
rule "stdio" created
metric "requestcount" created
metric "requestduration" created
metric "requestsize" created
metric "responsesize" created
metric "tcpbytesent" created
metric "tcpbytereceived" created
prometheus "handler" created
rule "promhttp" created
rule "promtcp" created
kubernetesenv "handler" created
rule "kubeattrgenrulerule" created
kubernetes "attributes" created
configmap "istio" created
customresourcedefinition "destinationpolicies.config.istio.io" created
customresourcedefinition "egressrules.config.
istio.io" created
customresourcedefinition "routerules.config.
istio.io" created
service "istio-pilot" created
serviceaccount "istio-pilot-service-account" created
deployment "istio-pilot" created
service "istio-ingress" created
serviceaccount "istio-ingress-service-account" created
deployment "istio-ingress" created
serviceaccount "istio-ca-service-account" created
deployment "istio-ca" created

×¢£ºÎÒ»¹ÔøÔÚKubernetes v1.7.3Éϰ²×°¹ýIstio 0.3.0°æ±¾£¬µ«ÔÚ´´½¨×é¼þʱ»á±¨ÏÂÃæ´íÎó£¨Õâ¸ö´íÎó¿ÉÄܻᵼÖºóÐøaddon°²×°ºó¹¤×÷²»Õý³££©£º

unable to recognize "istio.yaml": no matches for config.istio.io/, Kind=metric
unable to recognize "istio.yaml": no matches for config.istio.io/, Kind=metric
unable to recognize "istio.yaml": no matches for config.istio.io/, Kind=metric
unable to recognize "istio.yaml": no matches for config.istio.io/, Kind=metric
unable to recognize "istio.yaml": no matches for config.istio.io/, Kind=metric
unable to recognize "istio.yaml": no matches for config.istio.io/, Kind=metric

°²×°ºó£¬ÎÒÃÇÔÚistio-systemÕâ¸önamespaceÏ»ῴµ½ÈçÏÂPodºÍServiceÔÚÔËÐУ¨ÓÉÓÚIstioµÄ¸÷¸ö×é¼þµÄimage size¶¼²»Ð¡£¬Òò´ËPod״̬±äΪRunningÐèÒªÒ»¶ª¶ªÊ±¼ä£¬ÄÍÐĵȴý£©£º

# kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE
istio-ca-1363003450-jskp5 1/1 Running 0 3d
istio-ingress-1005666339-c7776 1/1 Running 4 3d
istio-mixer-465004155-twhxq 3/3 Running 24 3d
istio-pilot-1861292947-6v37w 2/2 Running 18 3d
# kubectl get svc -n istio-system
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingress 10.98.10.87 <pending> 80:31759/TCP
,443:25804/TCP 4d
istio-mixer 10.109.244.155 <none> 9091/TCP,15004/TCP,9093/TCP,9094/TCP,9102/TCP,
9125/UDP,42422/TCP 4d
istio-pilot 10.105.80.55 <none> 15003/TCP,443/TCP 4d
Istio°²×°³É¹¦£¡

ËÄ¡¢·þÎñÖÎÀí²ßÂÔÑéÖ¤

½ÓÏÂÀ´ÎÒÃÇÀ´Óü¸¸öÀý×ÓÑéÖ¤Ò»ÏÂIstioÔÚ·þÎñÖÎÀí·½ÃæµÄÄÜÁ¦£¡£¨Istio×Ô´øÒ»Ð©ÍêÕûµÄÀý×Ó£¬±ÈÈçbookinfo£¬ÓÃÓÚÑéÖ¤·þÎñÖÎÀíµÄÄÜÁ¦£¬µ«ÕâÀïÏȲ»´òËãÓÃÕâЩÀý×Ó£©

1¡¢ÑéÖ¤»·¾³ºÍÍØÆË

ÎÒÃÇÏÈÀ´¿´Ò»ÏÂÑéÖ¤»·¾³µÄʾÒâͼ£º

ÎÒÃÇ¿´µ½ÔÚService MeshÖв¿ÊðÁËÁ½¸öservice: serveraºÍserviceb£¬Ç°Õßµ÷ÓúóÕßÍê³ÉijÏîÒµÎñ£¬ºóÕßÔòµ÷ÓÃÍⲿ·þÎñÍê³ÉÒµÎñÂß¼­¡£

servicea£ºÄ£Äâpay·þÎñ£¬ÔÚÊÕµ½clientÇëÇóºó£¬½øÐÐpay´¦Àí£¬²¢½«´¦Àí½á¹ûͨ¹ýservicebÌṩµÄmsg notify·þÎñÏ·¢¸øuser¡£¸Ã·þÎñµÄendpointΪ/pay£»

serviceb£ºÄ£Äânotify·þÎñ£¬ÔÚÊÕµ½serviceaÇëÇóºó£¬½«messageת·¢¸øexternal service£¬Íê³ÉnotifyÂß¼­¡£¸Ã·þÎñµÄendpointΪ/notify£»

external service£ºÎ»ÓÚService MeshÖ®Í⣻

client£ºÎÒÃÇʹÓÃcurlÄ£Äâ¡£

ÎÒÃÇÏÈÀ´²¿ÊðserviceaºÍservicebµÄv0.1°æ±¾£º

ÒÔserviceaµÄ²¿ÊðΪÀý£¬serviceaµÄdeploymentÎļþÈçÏ£º

//svca-v0.1.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: svca
spec:
replicas: 1
template:
metadata:
labels:
app: svca
version: v0.1
spec:
containers:
- name: svca
image: docker.io/bigwhite/istio-demo-svca:v0.1
imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: svca
labels:
app: svca
spec:
ports:
- port: 80
targetPort: 8080
protocol: TCP
selector:
app: svca

×¢Ò⣬ÎÒÃDz¿Êðservice_aʱ²»ÄÜÖ±½ÓʹÓÃkubectl apply -f svca-v0.1.yaml£¬¶øÊÇÒªapply¾­¹ýistioctl£¨Ð轫Istio°²×°Ä¿Â¼ÏµÄbin·ÅÈëPATH£©´¦Àí¹ýµÄyaml£¬ÒÔ×¢ÈësidecarÈÝÆ÷¡£µ±È»Ò²¿ÉÒÔÅäÖÃΪ×Ô¶¯ÎªÃ¿¸öKubernetesÆô¶¯µÄPod×¢Èësidecar£¬µ«ÎÒÃÇÕâÀïûÓÐʹÓÃ×Ô¶¯×¢Èë¡£ÎÒÃÇÖ´ÐÐÏÂÃæÃüÁ

# kubectl apply -f <(istioctl kube-inject -f svca-v0.1.yaml)
deployment "svca" created
service "svca" created
# kubectl get pods
NAME READY STATUS RESTARTS AGE
svca-1997590752-tpwjf 2/2 Running 0 2m

ͬÑùµÄ·½·¨£¬ÎÒÃÇÀ´´´½¨svcb:v0.1£º

# kubectl apply -f <(istioctl kube-inject -f svcb-v0.1.yaml)
deployment "svcb" created
service "svcb" created

ÎÒÃÇ¿´µ½IstioÏòÿ¸öPodÖвåÈëÒ»¸ösidecar container£¬Õâ¸ö¾ÍÊÇÇ°ÃæËµµÄenvoy£¬Ö»²»¹ýcontainerÃû×ÖΪistio-proxy¡£

½ÓÏÂÀ´£¬ÎÒÃǰÑÄǸöexternal serviceÆô¶¯ÆðÀ´£º

# nohup ./msgd > 1.log & 2>&1
[1] 9423

ʵÑé»·¾³OKÁË¡£ÏÂÃæÎÒÃÇÀ´ÑéÖ¤Ò»ÏÂÒµÎñÊÇ·ñÊÇͨµÄ¡£

2¡¢Egress Rules

°´ÕÕ֮ǰÎÒÃǵÄÉ趨£¬ÎÒÃÇʹÓÃcurlÈ¥·ÃÎÊservice_a·þÎñµÄ/pay¶Ëµã£¬ÎÒÃDz鿴һÏÂsvca·þÎñµÄIPºÍ¶Ë¿Ú£º

# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S)
svca 10.105.38.238 <none> 80/TCP 9h
svcb 10.105.119.194 <none> 80/TCP 9h

ÎÒÃÇ·ÃÎÊÒ»ÏÂsvca·þÎñ£¬svcaµÄ·þÎñµØÖ·¿ÉÒÔͨ¹ýkubectl get svc²éµ½£º

# curl {svca_ip}/pay

²é¿´svcaºÍsvcbµÄÈÕÖ¾£º

//service_aµÄÈÕÖ¾£º
service_a:v0.1 is serving the request...
service_a:v0.1 pays ok
&{500 Internal Server Error 500 HTTP/1.1 1 1 map[X-Content-Type-Options:[nosniff] Date:[Tue, 02 Jan 2018 15:41:50 GMT] Content-Length:[66] Content-Type:[text/plain; charset=utf-8]] 0xc420058d40 66 [] false false map[] 0xc4200eaf00 <nil>}
service_a:v0.1 notify customer ok
// service_bµÄÈÕÖ¾£º
&{GET /notify?msg=service_a:v0.1-pays-ok HTTP/1.1 1 1 map[User-Agent:[Go-http-client/1.1] Accept-Encoding:[gzip]] {} <nil> 0 [] false svcb map[] map[] <nil> map[] 127.0.0.1:58778 /notify?msg=service_a:v0.1-pays-ok <nil> <nil> <nil> 0xc4200fa3c0}
service_b:v0.1 is serving the request...
service_b:v0.1 send msg error: Get http://10.100.35.27:9997/send?msg=service_a:v0.1-pays-ok: EOF

ÎÒÃÇ¿´µ½serviceaºÍserviceb¶¼·µ»ØÁË´íÎóÈÕÖ¾£¨×¢Ò⣺go http get·½·¨¶ÔÓÚnon-2xx response²»»á·µ»Ø´íÎó£¬ÎÒÃÇÖ»ÊÇ¿´µ½ÁËresponseÖеÄ500״̬Âë²ÅÒâʶµ½´íÎóµÄ´æÔÚ£©¡£ÆäÖÐÔ´Í·ÔÚservice_b£¬Ô­ÒòÊÇÆäÁ¬²»ÉÏÄǸöexternal service£¡ÄÇôΪʲôÁ¬²»ÉÏexternal serviceÄØ£¿ÕâÊÇÓÉÓÚȱʡÇé¿öÏ£¬ÆôÓÃÁËIstioµÄ·þÎñÊÇÎÞ·¨·ÃÎÊÍⲿURLµÄ£¬ÕâÊÇÒòΪPodÖеÄiptables°ÑËùÓÐÍâ·¢´«Ê䶼תÏòµ½ÁËSidecar´úÀí£¬¶øÕâÒ»´úÀíÖ»´¦Àí¼¯ÈºÄڵķÃÎÊÄ¿±ê¡£Òò´ËλÓÚService MeshÄڵķþÎñsvcbÎÞ·¨·ÃÎÊÍⲿµÄ·þÎñ£¨msgd£©£¬ÎÒÃÇÐèÒªÏÔʽµÄÌí¼Óegressrule¹æÔò£º

ÎÒÃÇ´´½¨Ò»¸öÔÊÐísvcb·ÃÎÊÍâ²¿ÌØ¶¨·þÎñµÄEgressRule£º

//rules/enable-svcb-engress-rule.yaml
apiVersion: config.istio.io/v1alpha2
kind: EgressRule
metadata:
name: enable-svcb-engress-rule
spec:
destination:
service: 10.100.35.27
ports:
- port: 9997
protocol: http

ʹ¹æÔòÉúЧ£º

# istioctl create -f enable-svcb-engress-rule.yaml
Created config egress-rule/default/enable-svcb-engress-rule at revision 30031258

ÕâʱÄãÔÙ³¢ÊÔcurl svca£¬ÎÒÃÇ¿ÉÒÔ¿´µ½msgdµÄÈÕÖ¾ÖгöÏÖÁËÏÂÃæµÄÄÚÈÝ£º

2018/01/02 23:58:16 &{GET /send?msg=service_a:v0.1-
pays-ok HTTP/1.1 1 1
map[X-Ot-Span-Context:[2157e7ffb8105330;2157e7ffb8105330;00000000
00000000] Content-Length:[0] User-Agent:[Go-http-client/1.1] X-
Forwarded-Proto:[http] X-Request-Id:[13c3af6e-2f52-993d-905f-aa
6aa4b57e2d] X-Envoy-Decorator-Operation:[default-route]
X-B3-
Spanid:[2157e7ffb8105330] X-B3-Sampled:[1] Accept-
Encoding:
[gzip] X-B3-Traceid:[2157e7ffb8105330] X-Istio-Attributes:
[Ch8KCXNvdXJjZS5pcBISMhAAAAAAAAAAAAAA//8KLgAMCjo
KCnNvdXJjZS51aWQSLBIqa3ViZXJuZXRlczovL3N2Y2ItMjAwO
Dk3Mzc2OS
1ncTBsaC5kZWZhdWx0]] {} <nil> 0 [] false 10.100.35.
27:9997
map[] map[] <nil> map[] 10.100.35.28:38188 /send?msg=service
_a:v0.1-pays-ok <nil> <nil> <nil> 0xc4200584c0}
2018/01/02 23:58:16 Msgd is serving the request...
2018/01/02 23:58:16 Msgd recv msg ok, msg= service_a:v0.1-pays-ok

˵Ã÷Svcbµ½Íⲿ·þÎñµÄͨÐű»´òͨÁË£¡

3¡¢Ç¨ÒÆÁ÷Á¿µ½Ð°汾svcb:v0.2

ÎÒÃǾ­³£ÓÐÕâÑùµÄÐèÇ󣬵±svcbÔËÐÐÒ»¶Îʱ¼äºó£¬svcbÌí¼ÓÁËÐÂfeature£¬°æ±¾ÒªÉý¼¶µ½v0.2ÁË£¬ÕâʱÎÒÃǻᲿÊðsvcb:v0.2£¬²¢½«Á÷Á¿Öð²½Çе½v0.2ÉÏ¡£

ÎÒÃÇÏÈÀ´²¿ÊðÒ»ÏÂsvcb:v0.2£º

// svcb-v0.2.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: svcb-v0.2
spec:
replicas: 1
template:
metadata:
labels:
app: svcb
version: v0.2
spec:
containers:
- name: svcb
image: docker.io/bigwhite/istio-demo-svcb:v0.2
imagePullPolicy: Always

ÎÒÃÇ¿ÉÒÔ¿´µ½£¬·þÎñÃû²»±ä£¬µ«°æ±¾µÄlabel±ä³ÉÁËv0.2£¬ÎÒÃÇÀ´Ö´ÐÐÕâ´Î²¿Êð£º

# kubectl apply -f <(istioctl kube-inject -f svcb-v0.2.yaml)
deployment "svcb-v0.2" created
# kubectl get pods
NAME READY STATUS RESTARTS AGE
svca-1997590752-pq9zg 2/2 Running 0 9h
svcb-2008973769-gq0lh 2/2 Running 0 9h
svcb-v0.2-3233505404-0g55w 2/2 Running 0 1m
svcb·þÎñÏÂÓÖÔö¼ÓÁËÒ»¸öendpoint:

svcb·þÎñÏÂÓÖÔö¼ÓÁËÒ»¸öendpoint:

# kubectl describe svc/svcb
.... ...
Selector: app=svcb
Type: ClusterIP
IP: 10.105.119.194
Port: <unset> 80/TCP
Endpoints: 10.40.0.28:8080,10.46.0.12:8080
... ...

´Ëʱ£¬Èç¹û°´ÕÕKubernetesµÄµ÷¶È·½Ê½£¬v0.1ºÍv0.2°æ±¾µÄÁ½¸ösvcb podÓ¦¸Ã1:1¾ùºâµØ³ÐÔØÁ÷Á¿¡£ÎªÁË·½±ã²é¿´Á÷Á¿·Ö²¼£¬ÎÒÃǽ«Ã¿¸ö°æ±¾µÄsvcbµÄpod¸±±¾ÊýÁ¿¶¼À©Õ¹Îª2¸ö£¨replicas: 2£©£¬ÕâÑùService MeshÖÐÒ»¹²»áÓÐ4¸ö svcb endpoints¡£

ͨ¹ýcurl·ÃÎÊsvca×¢ÈëÁ÷Á¿ºó£¬ÎÒÃÇ·¢ÏÖÁ÷Á¿¶¼¼¯ÖÐÔÚÒ»¸ösvcb:v0.2µÄpodÉÏ£¬²¢ÇÒ³¤Ê±¼äûÓб仯¡£ÎÒÃÇͨ¹ýÏÂÃæµÄroute rule¹æÔòÀ´³¢ÊÔ½«Á÷Á¿ÔÚsvcb:v0.1ºÍsvcb:v0.2Ö®¼ä1:1¾ùºâ£º

// route-rules-svcb-v0.2-50.yaml
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: route-rules-svcb
spec:
destination:
name: svcb
precedence: 1
route:
- labels:
version: v0.1
weight: 50
- labels:
version: v0.2
weight: 50
# istioctl create -f route-rules-svcb-v0.2-50.yaml
Created config route-rule/default/route-rules-svcb at revision 30080638

°´ÕÕIstioÎĵµÖеÄ˵·¨£¬Õâ¸ö¹æÔòµÄÉúЧÐèҪһЩʱ¼ä¡£Ö®ºóÎÒÃÇ×¢ÈëÁ÷Á¿£¬·¢ÏÖÁ÷Á¿Çл»µ½svcb:v0.1µÄÒ»¸öPodÉÏÈ¥ÁË£¬²¢ÇҺܳ¤Ò»¶Îʱ¼ä²»Ôø±ä»¯£¬Î´¾ùºâµ½svcb:v0.2ÉÏÈ¥¡£

ÎÒÃǸüÐÂÒ»ÏÂroute rule£¬½«Á÷Á¿È«²¿Çе½svcb:v0.2ÉÏÈ¥£º

//route-rules-svcb-v0.2-100.yaml
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: route-rules-svcb
spec:
destination:
name: svcb
precedence: 1
route:
- labels:
version: v0.2
weight: 100
# istioctl replace -f route-rules-svcb-v0.2-100.yaml
Updated config route-rule/default/route-rules-svcb to revision 30082944

ÎÒÃÇÓÃIstioµÄreplaceÃüÁî¸üÐÂÁ˹æÔò£ºroute-rules-svcb¡£¸üкó£¬ÔÙ´Î×¢ÈëÁ÷Á¿£¬Õâ»ØÁ÷Á¿ÖØÐ¼¯ÖÐÔÚsvcb:v0.2µÄÒ»¸öPodÉÏÁË£¬ÔÙ¹ýÒ»¶Îʱ¼äÁíÍâÒ»¸ösvcb:v0.2µÄpodÉϲÅÓÐÁËһЩÁ÷Á¿¡£µ«svcb:v0.1Éϲ»ÔÙÓÐÁ÷Á¿£¬Õâ¸öÇл»Êdzɹ¦µÄ¡£

ÔÚKubernetesµÄServiceµÄ¸ºÔؾùºâÖУ¬Kubernetes¾ÍÀûÓÃÁËiptablesµÄ¸ÅÂÊת·¢£¨random ¨Cprobability 0.5£©£¬Òò´ËÕâÖÖÁ÷Á¿¾ùºâ²¢·ÇÊǾ«È·µÄ£¬Ö»ÓÐÔÚ³¤Ê±¼ä´óÁ¿Á÷Á¿¾­¹ýºó£¬²ÅÄÜ¿´µ½Á÷Á¿µÄ·Ö²¼ÓëÉ趨µÄÈ¨ÖØÊÇÏàËÆµÄ£¬¿ÉÄÜIstioÒ²ÊÇÈç´Ë£¬ÕâÀï½öÊÇÈëÃÅ£¬¾Í²»ÉîÈëÍÚ¾òÁË¡£

µ±È»IstioÔÚ·ÓɹæÔòÉèÊ©·½ÃæµÄ¡°ÄÜÄÍ¡±Ô¶²»Ö¹ÉÏÃæÀý×ÓÖÐËùչʾµÄÄÇÑù£¬Èç¹ûҪϤÊýÁгö£¬ÄDZ¾Îĵij¤¶È¿ÉÊÇÒª±¬µôÁË¡£ÓÐÐËȤµÄÅóÓÑ¿ÉÒÔÈ¥·­¿´¹Ù·½Îĵµ¡£

Îå¡¢²å¼þ°²×°

IstioµÄÇ¿´ó΢·þÎñÖÎÀíÄÜÁ¦»¹ÌåÏÖÔÚÆä¼¯³ÉÁËGrafana¡¢Prometheus¡¢ServiceGraph¡¢ZipkinµÈAddons£¬Ó¦ÓóÌÐòÎÞÐè×öÈκθ͝£¬¾Í¿ÉÒÔ¾ßÓÐÊý¾ÝÊÕ¼¯¡¢¶ÈÁ¿Óë¿ÉÊÓ»¯µÄ¼à¿ØÄÜÁ¦¡¢·þÎñµÄ·Ö²¼Ê½¸ú×ÙÄÜÁ¦µÈ¡£ÎÒÃÇ¿ÉÒÔÔÚIstioµÄ°²×°°üÖÐÕÒµ½ÕâЩAddonsµÄ°²×°Îļþ£¬ÎÒÃÇÀ´ÖðÒ»ÊÔÊÔ¡£

1¡¢Prometheus & Grafana

ÎÒÃÇÏÈÀ´°²×°Ò»ÏÂPrometheusºÍGrafana²å¼þ£¨Î»ÓÚistio-0.4.0/install/kubernetes/addonÏÂÃæ£©£º

# kubectl apply -f prometheus.yaml
configmap "prometheus" created
service "prometheus" created
deployment "prometheus" created
# kubectl apply -f grafana.yaml
service "grafana" created
deployment "grafana" created
# kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE
grafana-3617079618-zpglx 1/1 Running 0 5m
prometheus-168775884-ppfxr 1/1 Running 0 5m
... ...
# kubectl get svc -n istio-system
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana 10.105.21.25 <none> 3000/TCP 16m
prometheus 10.103.160.37 <none> 9090/TCP 16m
... ...

ä¯ÀÀÆ÷ÖÐÊäÈëPrometheusµÄ·þÎñµØÖ·http://10.103.160.37:9090£¬·ÃÎÊPrometheus£º

µã»÷²Ëµ¥Ïstatus -> targets£¬²é¿´¸÷¸ötargetµÄ״̬ÊÇ·ñÕý³££º

Èç¹ûÏñÉÏͼËùʾÄÇÑù£¬¸÷¸ötarget¶¼ÊÇup״̬£¬ÄǾÍ˵Ã÷IstioÔËÐÐʱOKµÄ¡£·ñÔòÇë²Î¿¼istio troubleshootingÖеÄÄÚÈݶÔIstioÖðÒ»½øÐÐÅŲ飬ÓÈÆäÊÇistio-meshÕâ¸öTargetÔÚistio-0.3.0+kubernetes 1.7.3µÄ»·¾³ÖоÍÊÇDownµÄ״̬¡£

ä¯ÀÀÆ÷ÊäÈëgrafanaµÄ·þÎñµØÖ·£ºhttp://10.105.21.25:3000/£¬´ò¿ªgrafanaÃæ°å£º

Çл»µ½Istio Dashboard£¬²¢ÏòIstio Service Mesh×¢ÈëÁ÷Á¿£¬ÎÒÃǻῴµ½ÒDZíÅ̱仯ÈçÏ£º

2¡¢ServiceGraph

ServiceGraph²å¼þÊÇÓÃÀ´²é¿´·þÎñµ÷ÓùØÏµµÄ£¬ÎÒÃÇÀ´´´½¨Ò»Ï¸Ã×é¼þ£º

# kubectl apply -f servicegraph.yaml
deployment "servicegraph" created
service "servicegraph" created
# kubectl get svc -n istio-system
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
servicegraph 10.108.245.21 <none> 8088/TCP 52s
... ...

´´½¨³É¹¦ºó£¬ÏòService MeshÍøÂç×¢ÈëÁ÷Á¿£¬È»ºó·ÃÎÊServiceGraph£ºhttp://{servicegraph_ip}:8088/dotviz£¬ÔÚÎҵĻ·¾³ÀÎÒ¿´µ½µÄͼʾÈçÏ£º

µ÷ÓùØÏµËƺõÓÐЩÂÒ£¬ÄѵÀÊÇÎÒÔÚ³ÌÐòʹÓõĵ÷Ó÷½·¨²»¹»±ê×¼£¿:(

3¡¢Zipkin

Istio¼¯³ÉÁËZipkin£¬ÀûÓÃZipkinÎÒÃÇ¿ÉÒÔ×ö·Ö²¼Ê½·þÎñµ÷ÓõÄ×·×Ù¡£Ö®Ç°×Ô¼ºÔø¾­´î½¨¹ý»ùÓÚJaegerºÍOpenTracingµÄ·Ö²¼Ê½µ÷Ó÷þÎñ£¬Ê®·Ö·±Ëö¡£²¢ÇÒÒªÏëʹÓÃtracing£¬¶ÔÓ¦ÓôúÂëµÄÇÖÈë±Ø²»¿ÉÉÙ¡£

ÎÒÃǰ²×°Ò»ÏÂZipkin Addon£º

# kubectl apply -f zipkin.yaml
deployment "zipkin" created
service "zipkin" created
# kubectl get svc -n istio-system
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
zipkin 10.105.7.219 <none> 9411/TCP 1h

ÎÒÃÇ·ÃÎÊÒÔÏÂZikpinµÄUI£¬Í¨¹ýä¯ÀÀÆ÷´ò¿ªhttp://{zipkinserviceip}:9411¡£

½ÓÏÂÀ´£¬ÎÒÃÇÏòService Mesh×¢ÈëһЩÁ÷Á¿£¬È»ºóÔÚZipkinÊ×Ò³µÄ¡°·þÎñÃû¡±ÏÂÀ­¿òÖÐÑ¡Ôñ¡±svcb¡±£¬²éÕÒ¸ú×ÙÇé¿ö£º

ÎÒÃÇ¿´µ½£ºÔÚûÓжÔsvca£¬svcb×öÈκÎÐ޸ĵÄÇé¿öÏ£¬ÎÒÃÇÒÀÈ»¿ÉÒÔÔÚZipkinÖÐÕÒµ½svcbÏà¹ØµÄµ÷Óᣵã»÷ÆäÖÐÒ»¸ötrace£¬¿ÉÒԲ鿴ϸ½Ú£º

µ±È»Èç¹ûÄãÏë×öÄÚÈݸüΪ·á¸»µÄ¡¢¸üΪǿ´óµÄ¸ú×Ù£¬¿ÉÄÜÐèÒªÔÚÓ¦ÓôúÂëÖÐ×öЩÅäºÏ¡£

   
2517 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù