±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚitpub£¬ÎÄÕÂÖ÷Òª½éÉÜÁËIstio£¬IstioµÄÖ÷Òª¹¦ÄÜ£¬ÒÔ¼°Mixer¼Ü¹¹µÄÏêϸÐÅÏ¢µÈ£¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£
|
|
Ò»£ºIstio¼ò½é
1.Istio¶¨Òå
Ò»¸öÓÃÀ´Á¬½Ó£¬¹ÜÀíºÍ±£»¤·þÎñµÄ¿ª·¢Æ½Ì¨¡£IstioÌṩһÖÖ¼òµ¥µÄ·½Ê½½¨Á¢ÒѲ¿Êð·þÎñÍøÂ磬¾ß±¸¸ºÔؾùºâ£¬·þÎñ¼äÈÏÖ¤ºÍ¼à¿ØµÈ¹¦ÄÜ¡£
¶ø²»ÐèÒª¸Ä±äÈκηþÎñ´úÂë¡£ÏëҪΪ·þÎñÔö¼Ó¶ÔIstioµÄÖ§³Ö£¬Ö»ÐèÒªÔÚ»·¾³Öв¿ÊðÒ»¸ösidecar,ʹÓÃIstio¿ØÖÆÃæ°å¹¦ÄÜÅäÖú͹ÜÀí´úÀí£¬À¹½ØÎ¢·þÎñÖ®¼äµÄËùÓÐÍøÂçͨÐÅ¡£
2.ΪʲôÐèÒªIstio
Ëæ×Å΢·þÎñ³öÏÖ£¬Î¢·þÎñµÄÁ¬½Ó£¬¹ÜÀíºÍ¼à¿Ø³ÉΪÄÑÌâ¡£Kubernetes¿ÉÒÔ´¦Àí¶à¸öÈÝÆ÷µÄ¹¤×÷¸ºÔØ£¬µ«µ±Éæ¼°¸ü¸´ÔÓµÄÐèÇóʱ£¬ÐèÒªÏñIstioÕâÑùµÄ·þÎñÍø¸ñ¡£
3.IstioµÄÖ÷Òª¹¦ÄÜ
a.Á÷Á¿¹ÜÀí(Pilot): ¿ØÖÆ·þÎñÖ®¼äµÄÁ÷Á¿ºÍAPIµ÷ÓõÄÁ÷Ïò£¬Ê¹µÃµ÷ÓøüÁé»î¿É¿¿£¬²¢Ê¹ÍøÂçÔÚ¶ñÁÓÇé¿öϸü¼Ó½¡×³¡£
b.¿É¹Û²ìÐÔ£º ͨ¹ý¼¯³ÉzipkinµÈ·þÎñ£¬¿ìËÙÁ˽â·þÎñÖ®¼äµÄÒÀÀµ¹ØÏµ£¬ÒÔ¼°ËüÃÇÖ®¼äÁ÷Á¿µÄ±¾ÖʺÍÁ÷Ïò£¬´Ó¶øÌṩ¿ìËÙʶ±ðÎÊÌâµÄÄÜÁ¦¡£
c.²ßÂÔÖ´ÐÐ(mixer): ½«×éÖ¯²ßÂÔÓ¦ÓÃÓÚ·þÎñÖ®¼äµÄ»¥¶¯£¬È·±£·ÃÎʲßÂÔµÃÒÔÖ´ÐУ¬×ÊÔ´ÔÚÏû·ÑÕßÖ®¼äÁ¼ºÃ·ÖÅä¡£²ßÂԵĸü¸ÄÊÇͨ¹ýÅäÖÃÍø¸ñ¶ø²»ÊÇÐÞ¸ÄÓ¦ÓóÌÐò´úÂë¡£
d.·þÎñÉí·ÝºÍ°²È«(Istio-auth)£º ÎªÍø¸ñÖеķþÎñÌṩ¿ÉÑéÖ¤Éí·Ý£¬²¢Ìṩ±£»¤·þÎñÁ÷Á¿µÄÄÜÁ¦£¬Ê¹Æä¿ÉÒÔÔÚ²»Í¬¿ÉÐŶȵÄÍøÂçÉÏÁ÷ת¡£
4.Envoy¼Ü¹¹

a.svcA·þÎñ×÷Ϊ¿Í»§¶ËµãÓ÷þÎñ¶ËsvcB£¬svcB´æÔÚÓÐÁ½¸ö°æ±¾£¬µ«ÊÇsvcA²¢²»ÖªÇé
b.Envoy×÷Ϊsidecar²¿Ê𵽸÷¸ösvcµ½podÄÚ£¬´úÀíËùÓе½½ø³öÁ÷Á¿
c.µ±svcAͨ¹ýsvcBµ½ÓòÃû·ÃÎÊÆä·þÎñʱ£¬Envoy¸ù¾ÝPilotÅäÖõÄ·ÓɹæÔò£¬½«1%µÄÁ÷Á¿·Ö¸øÁËsvcBµÄalpha°æ±¾
5.Pilot¼Ü¹¹

ͨ¹ýÅäÖã¬Pilot¿ÉÒÔʹEnvoyʵÏÖ£ºÂ·ÓÉÅäÖᢹÊÕÏ×¢Èë¡¢Á÷Á¿Ç¨ÒÆ¡¢ÇëÇó³¬Ê±¡¢È۶ϵÈÖî¶àÄÜÁ¦¡£
6.Mixer¼Ü¹¹

MixerÖ÷ÒªÌṩÈý¸öºËÐŦÄÜ£º
ǰÌáÌõ¼þ¼ì²é£º·¢ÉúÔÚ·þÎñÏìÓ¦ÇëÇó֮ǰ£¬Èç¹û¼ì²é²»Í¨¹ý¿ÉÖÕÖ¹ÏìÓ¦
Åä¶î¹ÜÀí£º
Ò£²â±¨¸æ£º¿É¼à¿Ø·þÎñ¡¢Éϱ¨ÈÕÖ¾ÐÅÏ¢
¶þ£ºMixerÏê½â
1. »ù´¡ÉèÊ©ºó¶Ë£º

MixerÔÚÓ¦ÓóÌÐò´úÂëºÍ»ù´¡¼Ü¹¹ºó¶ËÖ®¼äÌṩͨÓÃÖнé²ã£¬
»ù´¡ÉèÊ©ºó¶ËÖ¼ÔÚÌṩÓÃÓÚ¹¹½¨·þÎñµÄÖ§³Ö¹¦ÄÜ¡£ËüÃǰüÀ¨·ÃÎÊ¿ØÖÆÏµÍ³£¬Ò£²â²¶»ñϵͳ£¬Åä¶îÖ´ÐÐϵͳ£¬¼Æ·ÑϵͳµÈµÈ¡£·þÎñ´«Í³ÉÏÖ±½ÓÓëÕâЩºó¶Ëϵͳ¼¯³É£¬´´½¨Ó²ñîºÏ£¬»¹ÓÐÕ´È¾ÌØ¶¨µÄÓïÒåºÍʹÓÃÑ¡Ïî¡£
Istio Ìṩͳһ³éÏó£¬Ê¹µÃ Istio ¿ÉÒÔÓëÒ»×鿪·Åʽ»ù´¡ÉèÊ©ºó¶Ë½øÐн»»¥¡£ÕâÑù×öÊÇΪÁ˸øÔËάÌṩ·á¸»¶øÉîÈëµÄ¿ØÖÆ£¬Í¬Ê±²»¸ø·þÎñ¿ª·¢ÈËÔ±´øÀ´¸ºµ£¡£Istio
Ö¼Ôڸıä²ãÓë²ãÖ®¼äµÄ±ß½ç£¬ÒÔ¼õÉÙϵͳ¸´ÔÓÐÔ£¬Ïû³ý·þÎñ´úÂëÖеIJßÂÔÂß¼²¢½«¿ØÖÆÈ¨½»¸øÔËά
2. ÊôÐÔ
ÊôÐÔÊÇÃèÊö³ö¿ÚÈë¿ÚÁ÷Á¿µÄÓÐÃû³ÆºÍÀàÐ͵ÄÔªÊý¾ÝƬ¶Î¡£
MixerÔÚÔËÐÐʱ£¬½ÓÊÜÒ»×éÊôÐÔ£¬mixer¸ù¾ÝÅäÖô¦Àí´«ÈëµÄÊôÐÔµ½Êʵ±µÄ»ù´¡ÉèÖúó¶Ë¡£
¹¦ÄÜ£º
a.ǰÆÚÌõ¼þ¼ì²é¡£ ·¢ÉúÔÚÇëÇó´¦Àíǰ £¬ÇëÇó±»À¹½Øµ½envoyʱ·ÃÎÊmixer¡£
ÔÊÐí·þÎñÔÚÏìÓ¦À´×Ô·þÎñÏû·ÑÕߵĴ«ÈëÇëÇó֮ǰÑé֤һЩǰÌáÌõ¼þ¡£Ç°ÌáÌõ¼þ¿ÉÒÔ°üÀ¨·þÎñʹÓÃÕßÊÇ·ñ±»ÕýÈ·ÈÏÖ¤£¬ÊÇ·ñÔÚ·þÎñµÄ°×Ãûµ¥ÉÏ£¬ÊÇ·ñͨ¹ýACL¼ì²éµÈµÈ¡£
b.Åä¶î¹ÜÀí¡£ ·¢ÉúÔÚÇëÇó´¦ÀíÖÐ £¬·þÎñÖÐÐèÒªµ÷Óúó¶Ë»ù´¡Éèʩʱ¡£
ʹ·þÎñÄܹ»ÔÚ·ÖÅäºÍÊͷŶà¸öά¶ÈÉϵÄÅä¶î£¬Åä¶îÕâÒ»¼òµ¥µÄ×ÊÔ´¹ÜÀí¹¤¾ß¿ÉÒÔÔÚ·þÎñÏû·ÑÕß¶ÔÓÐÏÞ×ÊÔ´·¢ÉúÕùÓÃʱ£¬ÌṩÏà¶Ô¹«Æ½µÄ£¨¾ºÕùÊֶΣ©¡£ÆµÂÊ¿ØÖƾÍÊÇÅä¶îµÄÒ»¸öʵÀý¡£
c.Ò£²â±¨¸æ¡£·¢ÉúÔÚÇëÇó´¦Àíºó £¬Éϱ¨²Î¿¼ÐÔÊý¾Ý¸ømixer¡£Ò²Òò´Ë£¬envoyÓµÓмì²épod½¡¿µÄÜÁ¦¡£
·þÎñÄܹ»Éϱ¨ÈÕÖ¾ºÍ¼à¿Ø¡£ÔÚδÀ´£¬Ëü»¹½«ÆôÓÃÕë¶Ô·þÎñÔËÓªÉÌÒÔ¼°·þÎñÏû·ÑÕߵĸú×ٺͼƷÑÁ÷¡£
Ò£²â±¨¸æÊÇÒì²½ÐÎʽ¡£¼´»º´æ¶àÌõÉϱ¨Ò»´Î
3.ÊÊÅäÆ÷

Mixer ÊǸ߶ÈÄ£¿é»¯ºÍ¿ÉÀ©Õ¹µÄ×é¼þ¡£ËûµÄÒ»¸ö¹Ø¼ü¹¦ÄܾÍÊǰѲ»Í¬ºó¶ËµÄ²ßÂÔºÍÒ£²âÊÕ¼¯ÏµÍ³µÄϸ½Ú³éÏó³öÀ´£¬Ê¹µÃ
Istio µÄÆäÓಿ·Ö¶ÔÕâЩºó¶Ë²»ÖªÇé¡£
Mixer ´¦Àí²»Í¬»ù´¡ÉèÊ©ºó¶ËµÄÁé»îÐÔÊÇͨ¹ýʹÓÃͨÓòå¼þÄ£ÐÍʵÏֵġ£Ã¿¸ö²å¼þ¶¼±»³ÆÎª Adapter£¬Mixerͨ¹ýËüÃÇÓ벻ͬµÄ»ù´¡ÉèÊ©ºó¶ËÁ¬½Ó£¬ÕâЩºó¶Ë¿ÉÌṩºËÐŦÄÜ£¬ÀýÈçÈÕÖ¾¡¢¼à¿Ø¡¢Åä¶î¡¢ACL
¼ì²éµÈ¡£Í¨¹ýÅäÖÃÄܹ»¾ö¶¨ÔÚÔËÐÐʱʹÓõÄÈ·ÇеÄÊÊÅäÆ÷Ì×¼þ£¬²¢ÇÒ¿ÉÒÔÇáËÉÀ©Õ¹µ½ÐµĻò¶¨ÖƵĻù´¡ÉèÊ©ºó¶Ë¡£
4.ÅäÖÃÎļþʾÀý
a.´¦ÀíÆ÷(Handler):
ÊÊÅäÆ÷·â×°ÁË Mixer ºÍÌØ¶¨Íⲿ»ù´¡ÉèÊ©ºó¶Ë½øÐн»»¥µÄ±ØÒª½Ó¿Ú£¬ÀýÈç Prometheus »òÕß
Stackdriver¡£¸÷ÖÖÊÊÅäÆ÷¶¼ÐèÒª²ÎÊýÅäÖòÅÄܹ¤×÷¡£ÀýÈçÈÕÖ¾ÊÊÅäÆ÷¿ÉÄÜÐèÒª IP µØÖ·ºÍ¶Ë¿ÚÀ´½øÐÐÈÕÖ¾µÄÊä³ö¡£
ÕâÀïµÄÀý×ÓÅäÖÃÁËÒ»¸öÀàÐÍΪ listchecker µÄÊÊÅäÆ÷¡£listchecker ÊÊÅäÆ÷ʹÓÃÒ»¸öÁбíÀ´¼ì²éÊäÈë¡£Èç¹ûÅäÖõÄÊǰ×Ãûµ¥Ä£Ê½ÇÒÊäÈëÖµ´æÔÚÓÚÁбíÖ®ÖУ¬¾Í»á·µ»Ø³É¹¦µÄ½á¹û¡£
apiVersion:
config.istio.io/v1alpha2
kind: listcheckermetadata:
name: staticversion
namespace: istio-systemspec:
providerUrl: http://white_list_registry/
blacklist: false |
{metadata.name}.{kind}.{metadata.namespace} ÊÇ HANDLER
µÄÍêÈ«ÏÞ¶¨Ãû¡£ÉÏÃæ¶¨ÒåµÄ¶ÔÏóµÄ FQDN ¾ÍÊÇ staticversion.listchecker.istio-system£¬Ëû±ØÐëÊÇΨһµÄ¡£spec
ÖеÄÊý¾Ý½á¹¹ÔòÒÀÀµÓÚ¶ÔÓ¦µÄÊÊÅäÆ÷µÄÒªÇó¡£
ÓÐЩÊÊÅäÆ÷ʵÏֵŦÄܾͲ»½ö½öÊÇ°Ñ Mixer ºÍºó¶ËÁ¬½ÓÆðÀ´¡£ÀýÈç
prometheus ÊÊÅäÆ÷Ïû·ÑÖ¸±ê²¢ÒÔ¿ÉÅäÖõķ½Ê½½«ËüÃǾۺϳɷֲ¼»ò¼ÆÊýÆ÷¡£
apiVersion:
config.istio.io/v1alpha2
kind: prometheusmetadata:
name: handler
namespace: istio-systemspec:
metrics:- name: request_count
instance_name: requestcount.metric.istio-system
kind: COUNTER
label_names:
- destination_service
- destination_version
- response_code- name: request_duration
instance_name: requestduration.metric.istio-system
kind: DISTRIBUTION
label_names:
- destination_service -
destination_version
- response_code
buckets:
explicit_buckets:
bounds: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25,
0.5, 1, 2.5, 5, 10] |
ÿ¸öÊÊÅäÆ÷¶¼¶¨ÒåÁË×Ô¼º¸ñʽµÄÅäÖÃÊý¾Ý¡£ÊÊÅäÆ÷¼°ÆäÅäÖõÄÏ꾡Áбí¿ÉÒÔÔÚÕâÀïÕÒµ½
b.ʵÀý(Instance):
ÅäÖÃʵÀý½«ÇëÇóÖеÄÊôÐÔÓ³Éä³ÉΪÊÊÅäÆ÷µÄÊäÈë¡£ÏÂÃæµÄÀý×Ó£¬ÊÇÒ»¸ö metric
ʵÀýµÄÅäÖã¬ÓÃÓÚÉú³É requestduration metric¡£
apiVersion:
config.istio.io/v1alpha2
kind: metricmetadata:
name: requestduration
namespace: istio-systemspec:
value: response.duration | "0ms" dimensions:
destination_service: destination.service | "unknown"
destination_version: destination.labels["version"]
| "unknown"
response_code: response.code | 200
monitored_resource_type: '"UNSPECIFIED"' |
c.¹æÔò(Rule):
¹æÔòÓÃÓÚÖ¸¶¨Ê¹ÓÃÌØ¶¨ÊµÀýÅäÖõ÷ÓÃijһ HANDLER µÄʱ»ú¡£±ÈÈçÎÒÃÇÏëÒª°Ñ
service1 ·þÎñÖУ¬ÇëÇóÍ·ÖдøÓÐ X-USER µÄÇëÇóµÄ requestduration Ö¸±ê·¢Ë͸ø
Prometheus HANDLER¡£
apiVersion:
config.istio.io/v1alpha2
kind: rulemetadata:
name: promhttp
namespace: istio-system
spec:
match: destination.service == "service1.ns.svc.cluster.local"
&& request.headers["x-user"]
== "user1"
actions:- handler: handler.prometheus
instances:
- requestduration.metric.istio-system |
¹æÔòÖаüº¬ÓÐÒ»¸ö MATCH ÔªËØ£¬ÓÃÓÚǰÖüì²é£¬Èç¹û¼ì²éͨ¹ýÔò»áÖ´Ðж¯×÷ÁÐ±í¡£¶¯×÷Öаüº¬ÁËÒ»¸öʵÀýÁÐ±í£¬Õâ¸öÁÐ±í½«»á·Ö·¢¸ø
HANDLER¡£¹æÔò±ØÐëʹÓà HANDLER ºÍʵÀýµÄÍêÈ«ÏÞ¶¨Ãû¡£Èç¹û¹æÔò¡¢HANDLER ÒÔ¼°ÊµÀýÈ«¶¼ÔÚͬһ¸öÃüÃû¿Õ¼ä£¬ÃüÃû¿Õ¼äºó׺¾Í¿ÉÒÔÔÚ
FQDN ÖÐÊ¡ÂÔ£¬ÀýÈç handler.prometheus¡£ |