±à¼ÍƼö: |
ÎÄÕ½éÉÜÁËEnvoy
¶¼ÊÇ×öЩʲô¹¤×÷,Ó¦ÓóÌÐòÈçºÎÓë Envoy ½áºÏÀ´Ê¹Óõġ¢ÇëÇóÊÇÈçºÎתµ½ Envoy
µÄµÈµÈ¡£
±¾ÎÄÀ´×ÔÓÚHULKÒ»Ïß¼¼ÊõÔÓ̸ £¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
Envoy ¼ò½é
ÔÚ Service Mesh ģʽÖУ¬Ã¿¸ö·þÎñ¶¼Å䱸ÁËÒ»¸ö´úÀí¡°sidecar¡±£¬ÓÃÓÚ·þÎñÖ®¼äµÄͨÐÅ¡£ÕâЩ´úÀíͨ³£ÓëÓ¦ÓóÌÐò´úÂëÒ»Æð²¿Ê𣬲¢ÇÒËü²»»á±»Ó¦ÓóÌÐòËù¸ÐÖª¡£Service
Mesh ½«ÕâЩ´úÀí×éÖ¯ÆðÀ´ÐγÉÁËÒ»¸öÇáÁ¿¼¶ÍøÂç´úÀí¾ØÕó£¬Ò²¾ÍÊÇ·þÎñÍø¸ñ¡£ÕâЩ´úÀí²»ÔÙÊǹÂÁ¢µÄ×é¼þ£¬ËüÃDZ¾ÉíÊÇÒ»¸öÓмÛÖµµÄÍøÂç¡£Æä²¿ÊðģʽÈçͼËùʾ£º

ÂÌÉ«²¿·Ö´ú±íÓ¦ÓóÌÐò
À¶É«²¿·ÖÔòÊÇsidecar
·þÎñÍø¸ñÊÇÓÃÓÚ´¦Àí·þÎñµ½·þÎñͨÐŵġ°×¨Óûù´¡ÉèÊ©²ã¡±¡£Ëüͨ¹ýÕâЩ´úÀíÀ´¹ÜÀí¸´ÔӵķþÎñÍØÆË£¬¿É¿¿µØ´«µÝ·þÎñÖ®¼äµÄÇëÇó¡£
´ÓijÖ̶ֳÈÉÏ˵£¬ÕâЩ´úÀí½Ó¹ÜÁËÓ¦ÓóÌÐòµÄÍøÂçͨÐŲ㡣
EnvoyÊÇ Service Mesh ÖÐÒ»¸ö·Ç³£ÓÅÐãµÄ sidecar
µÄ¿ªÔ´ÊµÏÖ¡£ÎÒÃǾÍÀ´¿´¿´ Envoy ¶¼ÊÇ×öЩʲô¹¤×÷¡£
Envoy Óõ½µÄ¼¸¸öÊõÓï
Host: ͨ³£ÎÒÃǽ« Host ¿´×öÊÇÒ»¸ö¾ß±¸ÍøÂçͨÐŹ¦ÄܵÄʵÌå(¿ÉÒÔÊÇһ̨ÎïÀí»ú£¬Ò²¿ÉÒÔÊÇÒ»Ì¨ÒÆ¶¯É豸µÈµÈ)
¡£ÔÚ Envoy ÖУ¬host ÊÇÒ»¸öÂß¼ÍøÂçÖеÄÓ¦ÓÃ. ¿ÉÄÜÔËÐÐÔÚÓÉÓжà¸öÖ÷»ú×é³ÉµÄµ×²ãÓ²¼þ£¬Ö»ÒªËüÃǸ÷×Ô¶ÀÁ¢Ñ°Ö·¡£
Downstream: ÇëÇ󷢯ðÕß(·þÎñÇëÇó·½)¡£
Upstream: ÇëÇó½ÓÊÕÕß(·þÎñÌṩ·½)¡£
Listener: ·þÎñ(³ÌÐò)¼àÌýÕß¡£¾ÍÊÇÕæÕý¸É»îµÄ¡£ envoy »á±©Â¶Ò»¸ö»òÕß¶à¸ölistener¼àÌýdownstreamµÄÇëÇó¡£
Cluster: upstream ¼¯Èº¡£Envoy ͨ¹ý·þÎñ·¢ÏÖ¶¨Î»¼¯Èº³ÉÔ±²¢»ñÈ¡·þÎñ¡£¾ßÌåÇëÇóµ½Äĸö¼¯Èº³ÉÔ±ÊÇÓɸºÔؾùºâ²ßÂÔ¾ö¶¨¡£Í¨¹ý½¡¿µ¼ì²é·þÎñÀ´¶Ô¼¯Èº³ÉÔ±·þÎñ״̬½øÐмì²é¡£
Mesh: ÔÚ±¾ÎÄÖÐ "Envoy mesh" Ö¸µÄÊÇÓÉÒ»×é Envoy ´úÀí×é³ÉµÄ£¬Îª²»Í¬·þÎñÖ®¼ä¿É¿¿´«µÝÇëÇóµÄ·þÎñÍø¸ñ¡£
Runtime configuration: Envoy ÅäÖÃÊÇÈȸüеģ¬ÎÞÐèÖØÆô¡£
Filter£º ¹ýÂËÆ÷¡£ÔÚ Envoy ÖÐÖ¸µÄÊÇһЩ¡°¿É²å°Î¡±ºÍ¿É×éºÏµÄÂß¼´¦Àí²ã¡£ÊÇ
Envoy ºËÐÄÂß¼´¦Àíµ¥Ôª¡£
Envoy »ù´¡¸ÅÄî
Ïß³ÌÄ£ÐÍ
Envoy ʹÓõ¥½ø³Ì¶àÏß³Ìģʽ¡£Ò»¸öÖ÷Ị̈߳¬¶à¸ö¹¤×÷Ï̡߳£Ö÷Ïß³Ìе÷ºÍ¹ÜÀíÕâ¶à¸öÏß³ÌÀ´¹¤×÷¡£Ã¿¸öÏ̶߳¼¶ÀÁ¢¼àÌý·þÎñ£¬²¢¶ÔÇëÇó½øÐйýÂ˺ÍÊý¾ÝµÄת·¢µÈ¡£
Ò»¸öÁ¬½Ó½¨Á¢ºó£¬Õâ¸öÏ߳̽«»á¹ÜÀí¸ÃÁ¬½ÓµÄÕû¸öÉúÃüÖÜÆÚ¡£Í¨³£ Envoy
ÊÇ·Ç×èÈûµÄ£¬¶ÔÓÚ´ó¶àÊýÇé¿ö½¨Òéÿ¸ö Envoy ÅäÖõŤ×÷Ïß³ÌÊýµÈÓÚ»úÆ÷µÄ CPU Ïß³ÌÊý¡£
Listeners
Envoy ÖÐÕæÕý¸É»îµÄ(ͨ³£ÊÇÒ»¸ö¼àÌý·þÎñ¶Ë¿ÚµÄ¹¤×÷Ïß³Ì)¡£
Envoy »áÆô¶¯Ò»¸ö»òÕß¶à¸ölistener£¬¼àÌýÀ´×Ô downstream
µÄÇëÇó¡£µ± listener ½ÓÊÕµ½ÐµÄÇëÇóʱ£¬»á¸ù¾Ý¹ØÁªµÄfiltersÄ£°å³õʼ»¯ÅäÖÃÕâЩ filters£¬²¢¸ù¾ÝÕâЩ
filters Á´¶ÔÕâЩÇëÇó×ö³ö´¦Àí£¨ÀýÈ磺ÏÞËÙ¡¢TLS ÈÏÖ¤¡¢HTTP Á¬½Ó¹ÜÀí¡¢MongoDB
Ðá̽¡¢TCP ´úÀíµÈµÈ£©¡£
Envoy ÊǶàÏß³ÌÄ£ÐÍ£¬Ö§³Öµ¥¸ö½ø³ÌÅäÖÃÈÎÒâÊýÁ¿µÄ listeners¡£Í¨³£½¨ÒéÒ»¸ö»úÆ÷ÉÏÔËÐÐÒ»¸ö
Envoy ½ø³Ì£¬¶ø²»¹ØÐÄÅäÖÃÁ˶àÉÙ¸ölisterners£¨ÈçÉÏ£º´ó¶àÊýÇé¿ölistenerÊýÁ¿µÈÓÚ»úÆ÷µÄCPUÏß³ÌÊý£©¡£
Ŀǰ Envoy Ö»Ö§³Ö TCP ÀàÐ굀 listeners¡£Ã¿¸ö listener ¶¼¿ÉÒÔ¶ÀÁ¢ÅäÖÃһЩL3/L4²ãµÄ
filters¡£
Listener »¹¿ÉÒÔͨ¹ý listener ·¢ÏÖ·þÎñÀ´¶¯Ì¬»ñÈ¡¡£
Network (L3/L4) filters
network (L3/L4) filters ¹¹³ÉÁËEnvoyÁ¬½Ó´¦ÀíµÄºËÐÄ¡£
ÔÚ listener ²¿·ÖÎÒÃǽéÉܹý, ÿ¸ö listener ¿ÉÒÔ×éºÏʹÓöà¸ö filters À´´¦ÀíÁ¬½ÓÊý¾Ý¡£
ĿǰÓÐÈýÖÖÀàÐ굀 network (L3/L4) filters:
Read: µ± Envoy ½ÓÊÕÀ´×ÔÏÂÓηþÎñÇëÇóÊý¾Ýʱ±»µ÷Óá£
Write: µ± Envoy ÏòÉÏÓηþÎñ·¢ËÍÊý¾Ýʱ±»µ÷Óá£
Read/Write: ÉÏÃæÁ½ÖÖfileter¶¼Êǵ¥Ïò¿ØÖÆ£¬Read/Write
filters ÔÚ½ÓÊÕÀ´×ÔÏÂÓηþÎñÇëÇóÊý¾ÝºÍÏòÉÏÓηþÎñ·¢ËÍÊý¾Ýʱ±»µ÷Óã¬ÊÇË«Ïò¿ØÖÆ¡£
ÕâЩ filter ͨ¹ý·ÖÎöÔʼ×Ö½ÚÁ÷ºÍÉÙÁ¿Á¬½Óʼþ(ÀýÈ磬TLSÎÕÊÖÍê³É£¬±¾µØ»òÔ¶³ÌÁ¬½Ó¶Ï¿ªµÈ)¶ÔÁ¬½Ó½øÐд¦Àí¡£
Network Filter(L7)/HTTP Filter
HTTP ÐÒéÊǵ±Ç°Ðí¶à·þÎñ¹¹½¨µÄ»ù´¡ÐÒ飬×÷ΪºËÐÄ×é¼þ£¬Envoy
ÄÚÖÃÁË HTTP Á¬½Ó¹ÜÀí filter¡£ ¸Ã filter ½«ÔʼÊý¾Ý×Ö½Úת»»³É HTTP ÐÒéÀàÐÍÊý¾Ý(±ÈÈ磺
headers¡¢body¡¢trailersµÈ)¡£Ëü»¹»á´¦ÀíһЩͨÓõÄÎÊÌâ(±ÈÈ磺requestÈÕÖ¾¡¢request
IDÉú³ÉºÍrequest×·×Ù¡¢ÇëÇó/ÏìӦͷ¿ØÖÆ¡¢Â·Óɱí¹ÜÀíºÍ״̬Êý¾Ýͳ¼ÆµÈ)¡£
HTTP Á¬½Ó¹ÜÀíÌṩÁËÈýÖÖÀàÐ͵Äfilter£º
HTTP ÐÒéÊǵ±Ç°Ðí¶à·þÎñ¹¹½¨µÄ»ù´¡ÐÒ飬×÷ΪºËÐÄ×é¼þ£¬Envoy ÄÚÖÃÁË HTTP Á¬½Ó¹ÜÀí
filter¡£ ¸Ã filter ½«ÔʼÊý¾Ý×Ö½Úת»»³É HTTP ÐÒéÀàÐÍÊý¾Ý(±ÈÈ磺 headers¡¢body¡¢trailersµÈ)¡£Ëü»¹»á´¦ÀíһЩͨÓõÄÎÊÌâ(±ÈÈ磺requestÈÕÖ¾¡¢request
IDÉú³ÉºÍrequest×·×Ù¡¢ÇëÇó/ÏìӦͷ¿ØÖÆ¡¢Â·Óɱí¹ÜÀíºÍ״̬Êý¾Ýͳ¼ÆµÈ)¡£
HTTP Á¬½Ó¹ÜÀíÌṩÁËÈýÖÖÀàÐ͵Äfilter£º
Decoder: ½âÎöÇëÇóÊý¾ÝÁ÷ʱ(headers£¬body£¬trailersµÈ)µ÷Óã¬ÊôÓÚÈë¿Úµ¥·½Ïò¿ØÖÆ¡£
Encoder: ±àÂëÏìÓ¦Êý¾ÝÁ÷ʱ(headers, body, and trailers)µ÷Óã¬ÊôÓÚ³ö¿Úµ¥·½Ïò¿ØÖÆ.
Decoder/Encoder: Decoder/Encoder ÓÃÓÚÈë/³ö¿ÚË«Ïò¿ØÖÆ.
HTTP Filters
HTTP protocols
Envoy HTTP Á¬½Ó¹ÜÀíÔÉúÖ§³ÖHTTP/1.1, WebSockets
ºÍ HTTP/2£¬Ôݲ»Ö§³Ö SPDY¡£
Envoy ¶Ô HTTP µÄÖ§³ÖÔÚÉè¼ÆÖ®³õ¾ÍÊÇÒ»¸öHTTP/2µÄ¶à·¸´ÓôúÀí¡£¶ÔÓÚ
HTTP/1.1 ÀàÐÍÁ¬½Ó£¬±à½âÂëÆ÷½« HTTP/1.1 µÄÊý¾Ýת»»ÎªÀàËÆÓÚ HTTP/2 »òÕ߸ü¸ß²ãµÄ³éÏó´¦Àí¡£ÕâÒâζ×Å´ó¶àÊý´úÂë²»ÓùØÐĵײãÁ¬½ÓʹÓõÄÊÇ
HTTP/1.1 »¹ÊÇ HTTP/2¡£
access log
HTTP Á¬½Ó¹ÜÀíÖ§³Ö access log£¬¿ÉÒԼǼ·ÃÎÊÈÕÖ¾£¬ÇÒ¿ÉÒÔÁé»îµÄÅäÖá£
HTTP ·ÓÉ
Envoy °üº¬ÁËÒ»¸ö HTTP router filter£¬¸Ã filter
¿ÉÒÔÓÃÀ´ÊµÏÖ¸ü¸ß¼¶µÄ·Óɹ¦ÄÜ¡£Ëü¿ÉÒÔÓÃÀ´´¦Àí±ßÔµÁ÷Á¿/ÇëÇó(ÀàËÆ´«Í³µÄ·´Ïò´úÀí)£¬Í¬Ê±Ò²¿ÉÒÔ¹¹½¨Ò»¸ö·þÎñÓë·þÎñÖ®¼äµÄ
Envoy Íø¸ñ(µäÐ͵ÄÊÇͨ¹ý¶ÔHTTP headerµÈµÄ´¦ÀíʵÏÖµ½Ìض¨·þÎñ¼¯ÈºµÄת·¢)¡£
ÿ¸öHTTPÁ¬½Ó¹ÜÀí filter ¶¼»á¹ØÁªÒ»¸ö·ÓÉ±í¡£Ã¿¸ö·Óɱí»á°üº¬¶Ô HTTP Í·¡¢ÐéÄâÖ÷»úµÈµÄÅäÖÃÐÅÏ¢¡£
{
"cluster": "...",
"route_config_name": "route_config_example",
"refresh_delay_ms": "3000"
}
route_config_example:
{
"validate_clusters": "example",
"virtual_hosts": [
{
"name": "vh01",
"domains": ["test.foo.cn"],
"routes": [],
"require_ssl": "...",
"virtual_clusters": [],
"rate_limits":
"request_headers_to_add": [
{"key": "header1", "value":
"value1"},
{"key": "header2", "value":
"value2"}
]
},
],
"internal_only_headers": [],
"response_headers_to_add": [],
"response_headers_to_remove": [],
"request_headers_to_add": [
]
} |
·ÓɱíÓÐÁ½ÖÖÅäÖ÷½Ê½£º
¾²Ì¬ÅäÖÃÎļþ¡£
ͨ¹ýRDS(Route discovery service) API¶¯Ì¬ÅäÖá£
RDS ÊÇÒ»×éAPIÓÃÀ´¶¯Ì¬»ñÈ¡±ä¸üºóµÄ·ÓÉÅäÖá£
router filter Ö§³ÖÈçϹ¦ÄÜ£º
Ö§³Ö Virtual hosts¡£Ó³Éä domains/authorities µ½Ò»ÏµÁеÄ·ÓɹæÔòÉÏ¡£[ºÍnginxµÈÒ»Ñù]¡£
»ùÓÚǰ׺ºÍ¾«È·pathµÄ¹æÔòÆ¥Åä(ÓеĶԴóСд¼ÈÃô¸Ð,ÓеIJ»Ãô¸Ð)¡£ ÓÉÓÚ Regex/slug
»áʹµÃÓóÌÐòÀ´Åж¨Â·ÓɹæÔòÊÇ·ñÓëÆäËü¹æÔò³åÍ»ºÜÀ§ÄÑ, ËùÒÔ,ĿǰÔݲ»Ö§³Ö¡£ÓÉÓÚÕâ¸öÔÒò£¬ÎÒÃDz»½¨ÒéÔÚ·´Ïò´úÀí²ãÃæÊ¹ÓûùÓÚregex/slugµÄ·ÓÉ,
µ±È»ÁË£¬Î´À´ÎÒÃÇ»á¸ù¾ÝÐèÇóÌí¼Ó¶ÔËüµÄÖ§³Ö¡£
Virual host ²ãÃæµÄ TLS ÖØ¶¨Ïò¡£ ·ÖÁ½Àࣺ
all£º ËùÓÐÇëÇó¶¼±ØÐëʹÓÃTLS¡£Èç¹ûÇëÇóûÓÐʹÓÃTLS£¬·µ»Ø302¡£
external_only£º Ö»ÒªÇóÍâÍøÇëÇóʹÓÃTLS¡£Èç¹ûÀ´×ÔÍâÍøµÄÇëÇóûÓÐʹÓÃTLS¡£ Èç¹û£¬¸Ä²ÎÊýûÓÐÅäÖ㬸Ãvirtual
host½«²»»á¶ÔTLSÓÐÒªÇó¡£
·ÓɲãÃæ¶Ô Path/host ÖØ¶¨Ïò¡£
hostÖØÐ´¡£ Ö§³ÖÁ½ÖÖÖØÐ´·½Ê½£º
1. ¹Ì¶¨Öµ¡£host_rewrite²ÎÊýÅäÖá£
2. ¶¯Ì¬ÅäÖ᣸ù¾Ýupstream Ö÷»úµÄ DNS ÀàÐͶ¯Ì¬ÅäÖᣠ¾ßÌåµÄÖµÊÇÓÉcluster
manager´ÓupstreamÖÐÑ¡³öÀ´µÄ£¬ÆäÖ÷»úÃû×÷ÎªÖØÐ´µÄÖµ¡£ ÕâÖÖ·½Ê½Ö»ÓÃÔÚrouteµÄÄ¿µÄ¼¯ÈºÊÇ
strict_dns or logical_dns ÀàÐ͵ij¡¾°¡£ÆäËü¼¯ÈºÀàÐͲ»Æð×÷Óᣠ½« auto_host_rewrite
ÉèÖÃtrue¼´¿É¡£ÕâÁ½¸ö²ÎÊý²»ÄÜͬʱʹÓá£
Ç°×ºÖØÐ´(prefix)¡£
·ÓɲãÃæ¶Ô Websocket upgrades. ÅäÖøùæÔòºó£¬À´×Ô HTTP/1.1 ¿Í»§¶Ëµ½¸Ã·ÓɹæÔòµÄÁ¬½Ó¶¼»á±»×ª»»³É
WebSocket µÄÁ¬½Ó¡£ Èç¹ûÅäÖÃΪ true, Envoy ¶ÔÓڸ÷ÓɵĵÚÒ»¸öÇëÇóÐè´ø WebSocket
upgrade headers¡£Èç¹ûûÓÐÌí¼Ó¸Ãheader£¬ÇëÇó½±±¾Ü¾ø¡£Èç¹ûÉèÖÃÁË, Envoy
½«»áÔÚclientºÍupstream serverÖ®¼äÉèÖÃTCP´úÀí ¡£upstream ¸ºÔð¶Ï¿ª¸ÃÁ¬½Ó£¬·ñÔò
Envoy ÈÎÈ»»áת·¢Êý¾Ýµ½¸Ãupstream server¡£
ÇëÇóÖØÊԺͳ¬Ê±ÉèÖà Envoy ÓÐÁ½ÖÖ·½Ê½À´ÉèÖÃÇëÇóÖØÊÔ¡£
1. ͨ¹ýrouteÉèÖá£
2. ͨ¹ýrequest headerÉèÖᣠ֧³ÖµÄÅäÖÃÏîÓУº 2.1 ×î´óÖØÊÔ´ÎÊý: ÿ´ÎÖØÊÔÖ®¼ä»áʹÓÃÖ¸ÊýÍ˱ÜËã·¨.ÁíÍ⣬ËùÓÐÖØÊÔ¶¼°üº¬ÔÚÕûÌåÇëÇó³¬Ê±Ö®ÄÚ¡£Õâ±ÜÃâÁËÓÉÓÚ´óÁ¿ÖØÊÔ¶øÐèÒª½Ï³¤µÄÇëÇóʱ¼ä¡£
2.2 ÖØÊÔÌõ¼þ: ¿ÉÒÔ¸ù¾ÝÓ¦ÓõÄÐèÇóÅäÖô¥·¢ÖØÊÔµÄÌõ¼þ¡£ÀýÈ磺 ÍøÂç´íÎó, 5xx ·µ»ØÂë, ÃݵȵÄ4xx·µ»ØÂë,
µÈµÈ¡£
ÔËÐÐʱ¶ÔÀ´×ÔÉÏÏÂÓÎÊý¾ÝµÄÐá̽¡£
ʹÓûùÓÚ weight/percentage-based µÄ·ÓÉ£¬¶ÔÀ´×Ô¶à¸öÉÏÓεÄÊý¾Ý½øÐвð·Ö¡£
ÈÎÒâ HTTP Í·Æ¥Åä·ÓɹæÔò¡£
Ö§³ÖÐéÄ⼯Ⱥ¡£
»ùÓÚ·ÓɵÄÓÅÏȼ¶¡£
»ùÓÚ·ÓÉµÄ hash ¸ºÔؾùºâ¡£ÐèÒªÔÚ header ÖÐÉèÖà hash ʹÓõIJßÂÔ¡£
¶ÔÓÚ·Ç TLS µÄת·¢Ö§³Ö¾ø¶Ô urls¡£
ÆäÖУºÖض¨Ïò¡¢³¬Ê±¡¢ÖØÊÔ¶ÔÓÚ websocket upgrades
ÊDz»Ö§³ÖµÄ¡£
Connection pooling
¶ÔÓÚ HTTP ÀàÐÍ£¬Envoy ÌṩÁ˶ÔÁ¬½Ó³ØµÄ³éÏó£¬Á¬½Ó³ØÆÁ±Îµ×²ãÐÒéÀàÐÍ(HTTP/1.1¡¢HTTP/2)£¬ÏòÉϲãÌṩͳһµÄ½Ó¿Ú¡£Óû§²»ÓùØÐĵײãÊÇ»ùÓÚHTTP/1.1µÄ¶àÏ̻߳¹ÊÇ»ùÓÚHTTP/2µÄ¶à·¸´Ó÷½Ê½ÊµÏÖϸ½Ú¡£
TCP proxy
TCP ´úÀí£¬L3/L4²ãÁ¬½ÓµÄת·¢¡£ÕâÓ¦¸ÃÊÇ Envoy ×î»ù´¡µÄ¹¦ÄÜ¡£Ò»°ãÊÇ×÷Ϊ
downstream ¿Í»§¶ËÓë upstream ·þÎñ¼¯ÈºÖ®¼äµÄÁ¬½Ó´úÀí¡£TCP ´úÀí¼È¿ÉÒÔµ¥¶ÀʹÓã¬Ò²¿ÉÒÔÓëÆäËü
filter ×éºÏʹÓã¬ÀýÈç( MongoDB filter »òÕß ÏÞËÙfilter)¡£
ÔÚ TCP ´úÀí²ã»¹¿ÉÒÔÅäÖà route ²ßÂÔ£¬±ÈÈ磺 ÔÊÐíÄÄЩIP¶ÎºÍÄÄЩ¶Ë¿Ú½øÀ´µÄÇëÇó·ÃÎÊ£¬ÔÊÐí·ÃÎÊÄÄЩIP¶ÎºÍÄÄЩ¶Ë¿ÚµÄ·þÎñ¡£
TCP ´úÀíÅäÖÃÈçÏ£º
{
"name": "tcp_proxy",
"config": {
"stat_prefix": "...",
"route_config": "{...}"
}
} |
stat_prefix£º ͳ¼ÆÊý¾Ýǰ׺£¬Ö÷ÒªÊÇÓÃÓÚÇø·Öͳ¼ÆÊý¾Ý¡£
route_config£º filter µÄ·ÓÉ±í¡£
ÀýÈ磺
{
"name": "tcp_proxy",
"config": {
"stat_prefix": "...",
"route_config": "{
"routes": [
{
"cluster": "...",
"destination_ip_list": [
"192.168.3.0/24",
"50.1.2.3/32",
"10.15.0.0/16",
"2001:abcd::/64"
],
"destination_ports": "1-1024,2048-4096,12345",
"source_ip_list": [
"192.168.3.0/24",
"50.1.2.3/32",
"10.15.0.0/16",
"2001:abcd::/64"
],
"source_ports": "1-1024,2048-4096,12345"
},
]
}"
}
} |
¼òµ¥Ëµ£¬¾ÍÊÇÉÏÏÂÓηþÎñµÄ·ÃÎÊ¿ØÖÆ¡£
TPC ´úÀíÖ§³ÖµÄһЩͳ¼ÆÊý¾Ý£º
downstream_cx_total ´¦ÀíµÄÁ¬½Ó×ÜÊý.
downstream_cx_no_route ²»Æ¥ÅärouteµÄ×ÜÊý.
downstream_cx_tx_bytes_total ·¢Ë͸øÏÂÓεÄ×Ü×Ö½ÚÊý
downstream_cx_tx_bytes_buffered Gauge µ±Ç°ÎªÏÂÓηþÎñ»º´æµÄ×Ö½ÚÊý
downstream_flow_control_paused_reading_total ±»Á÷¿ØÔÝÍ£´ÓÏÂÓηþÎñ¶ÁÈ¡Êý¾ÝµÄ´ÎÊý
downstream_flow_control_resumed_reading_total
±»Á÷¿Ø¿ØÖÆÖØÐ´ÓÏÂÓηþÎñ¶ÁÈ¡Êý¾ÝµÄ´ÎÊý
gRPC µÄÖ§³Ö
Envoy ÔÚ´«Êä²ãºÍÓ¦ÓòãÁ½¸ö²ã¸øÓègRPCµÄ¸ß¶ÈÖ§³Ö¡£
Envoy Êǵ±Ç°¼«ÉÙÊýÄÜͬʱÕýÈ·Ö§³ÖHTTP/2 trailersºÍ´«ÊägRPCÇëÇóºÍÏìÓ¦µÄµÄHTTP´úÀí¡£
gRPC ÔËÐÐʱ¶ÔÓÚһЩÓïÑÔ¶øÑÔ»¹ÊDz»Ì«³ÉÊ졣Ϊ´Ë£¬Envoy Ö§³ÖÒ»¸ö½Ð gRPC bridge
µÄ filter£¬ËüÔÊÐígRPCÇëÇóÄܹ»Í¨¹ýHTTP/1.1·¢Ë͸øEnvoy¡£ Envoy »á½«¸ÃÇëÇóת»»³ÉHTTP/2´«Ê䵽ĿµÄserver¡£ÏìÓ¦»á±»×ª»»³É
HTTP/1.1 ·µ»Ø¡£
µ±×°ÁËbridge filterºó, bridge filter ³ýÁËÊÕ¼¯È«¾ÖHTTPͳ¼ÆÖ®Í⣬ÇŽӹýÂËÆ÷»¹ÊÕ¼¯Ã¿¸öRPCͳ¼ÆÐÅÏ¢¡£
gRPC-Web is supported by a filter that allows a gRPC-Web
client to send requests to Envoy over HTTP/1.1 and
get proxied to a gRPC server. It¡¯s under active development
and is expected to be the successor to the gRPC bridge
filter.
Ö§³Ö gRPC-web¡£Í¨¹ý filter Äܹ»½«Ê¹Óà HTTP/1.1 ·¢Ë͵½Envoy µÄ gRPC-Web
¿Í»§¶ËÇëÇó´úÀíµ½ gRPC server¡£¸Ã feature ÕýÔÚ¿ª·¢½×¶Î¡£
JSON ת»»Æ÷Ö§³Ö»ùÓÚ JSON µÄ RESTFUL ¿Í»§¶Ëͨ¹ý
HTTP ·¢ËÍÇëÇó¸ø Envoy ²¢´úÀí¸ø gRPC ·þÎñ.
WebSocket µÄÖ§³Ö
Envoy Ö§³ÖHTTP/1.1Á¬½Óµ½WebSocketÁ¬½ÓµÄÇл»(ĬÈÏÊÇÖ§³ÖµÄ)¡£
Ìõ¼þ£º
client ÐèÒªÏÔʾÌí¼Ó upgrade headers ¡£
HTTP ·ÓɹæÔòÖÐÏÔʾµÄÉèÖÃÁË¶Ô websocketµÄÖ§³Ö(use_websocket)¡£
ÒòΪ Envoy ½« WebSocket connections ×÷Ϊ
TCP connection À´´¦Àí£¬Òò´Ë£¬Ò»Ð©HTTPµÄÌØÐÔËü²»Ö§³Ö£¬ÀýÈ磺 ÖØ¶¨Ïò¡¢³¬Ê±¡¢ÖØÊÔ¡¢ÏÞËÙ¡¢
shadowing . µ«ÊÇ, prefix ÖØÐ´, host ÖØÐ´, traffic shifting
and splitting ¶¼ÊÇÖ§³ÖµÄ.
Envoy¶ÔWebSocketµÄ´úÀíÊÇTCP²ã£¬ËüÀí½â²»ÁËWebSocket²ãµÄÓïÒ壬ËùÒÔ¶ÔÓÚÁ¬½Ó¶Ï¿ªÓ¦¸ÃÓÉupstreamµÄclientÀ´Ö÷¶¯¹Ø±Õ¡£
Envoy¶ÔWebSocketµÄÖ§³ÖÓënginx¶ÔWebSocketµÄÖ§³ÖÊÇÏàͬµÄ¡£
¸ß¼¶¸ÅÄî
¼¯Èº¹ÜÀíÆ÷(Cluster manager)
Envoy ¼¯Èº¹ÜÀíÆ÷¹ÜÀíËùÓÐ upstream ¼¯Èº½Úµã¡£
upstream ¼¯Èº½Úµã¶¼ÓÉһЩÁÐ L3/L4/L7 ²ã filter
Á´×é³É£¬ËüÃÇ¿ÉÓÃÓÚÈÎÒâÊýÁ¿µÄ²»Í¬´úÀí·þÎñ¡£
¼¯Èº¹ÜÀíÆ÷Ïò filter Á´±©Â¶Ò»×éAPI£¬Õâ×éAPIÔÊÐí filters
»ñÈ¡·¢Íù upstream ¼¯ÈºµÄL3/L4²ãµÄÁ¬½Ó»ò³éÏóµÄ HTTP Á¬½Ó³ØµÄÊý¾Ý¡£ÔÚ filter
´¦Àí½×¶Îͨ¹ý¶ÔÔʼ×Ö½ÚÁ÷µÄ·ÖÎöÈ·¶¨ÊÇÒ»¸öÁ¬½ÓÊÇ L3/L4 ²ãµÄÁ¬½Ó»¹ÊÇÒ»¸öÐ嵀 HTTP Á÷¡£
³ýÁË»ù±¾µÄÁ¬½ÓÀàÐÍ·ÖÎöÍ⣬¼¯Èº¹ÜÀíÆ÷»¹Òª´¦ÀíһЩÁеĸ´ÔÓ¹¤×÷£¬ÀýÈ磺֪µÀÄÄЩÖ÷»ú¿ÉÓúͽ¡¿µ£¬¸ºÔؾùºâ£¬ÍøÂçÁ¬½ÓÊý¾ÝµÄ±¾µØ´æ´¢£¬Á¬½ÓÀàÐÍ(TCP/IP,
UDS)£¬ÐÒéÀàÐÍ(HTTP/1.1,HTTP/2)µÈ¡£
¼¯Èº¹ÜÀíÆ÷Ö§³ÖÁ½ÖÖ·½Ê½»ñÈ¡Ëü¹ÜÀíµÄ¼¯Èº½Úµã£º
ͨ¹ý¾²Ì¬µÄÅäÖÃÎļþ
ͨ¹ý¶¯Ì¬µÄ¼¯Èº·¢ÏÖAPI(CDS)¡£
CDS£ºCluster discovery service£¬ÊÇÒ»¸ö¿ÉÑ¡µÄAPI£¬EnvoyÓÃËüÀ´¶¯Ì¬µÄ»ñÈ¡cluster
managerµÄ³ÉÔ±¡£
¼¯Èº¹ÜÀíÆ÷ÅäÖÃÏîÈçÏ£º
{
"clusters": [],
"sds": "{...}",
"local_cluster_name": "...",
"outlier_detection": "{...}",
"cds": "{...}"
} |
Service discovery(SDS)
·þÎñ·¢ÏÖÓм¸ÖÖ·½Ê½£º
1.¾²Ì¬ÅäÖá£Í¨¹ýÅäÖÃÎļþÅäÖÃ(IP/PORT¡¢unix domain
socketµÈ)¡£
2.»ùÓÚDNSµÄ·þÎñ·¢ÏÖ¡£
3.Original destination
4.Service discovery service (SDS)
5.On eventually consistent service
discovery
¸ü¶à·þÎñ·¢ÏÖÄÚÈÝ
Ö÷¶¯½¡¿µ¼ì²é
¸ù¾ÝÅäÖõIJ»Í¬, Envoy Ö§³Ö3ÖÖ½¡¿µ¼ì²é·½Ê½¡£
1.»ùÓÚ HTTP
Envoy Ïò upstream ½Úµã·¢ËÍÒ»¸ö HTTP ÇëÇ󣬷µ»Ø
200 ´ú±í½¡¿µ, ·µ»Ø 503 ´ú±í¸Ãhost²»ÔÙ½ÓÊÕÇëÇó/Á÷Á¿¡£
»ùÓÚ HTTP µÄ½¡¿µ¼ì²éÖ§³Ö3ÖÖ²ßÂÔ£º
1.1 No pass through
ÕâÖÖģʽ Envoy ²»»á½«½¡¿µ¼ì²éµÄÇëÇóת·¢¸ø±¾µØµÄ·þÎñ£¬¶øÊǸù¾Ýµ±Ç°½ÚµãÊÇ·ñ±»
draining ·µ»Ø 200 »òÕß 503.
1.2 Pass through
ÓëµÚÒ»ÖÖģʽ²»Í¬£¬ÕâÖÖģʽ Envoy »á½«½¡¿µ¼ì²éµÄÇëÇóת·¢¸ø±¾µØ·þÎñ£¬µ÷Óñ¾µØ·þÎñµÄ½¡¿µ¼ì²é½Ó¿Ú£¬·µ»Ø
200 »ò 503.
1.3 Pass through with caching
ÕâÖÖģʽÊÇǰÁ½ÖÖģʽµÄ¸ß¼¶°æ£¬µÚÒ»ÖÖ·½°¸Êý¾Ý²»Ò»¶¨×¼£¬µÚ¶þÖÖÇëÇó̫Ƶ·±»á¶ÔÐÔÄÜÓÐÓ°Ïì¡£
¸Ãģʽ¼ÓÁ˸ö»º´æµÄÖ§³Ö£¬ÔÚ»º´æÖÜÆÚÄÚ½á¹ûÖ±½Ó´Ó»º´æÖÐÈ¡£¬»º´æÊ§Ð§ºóÔÙÇëÇóÒ»´Î±¾µØ·þÎñ¼ÓÔØµ½»º´æÖС£
ÕâÊÇÍÆ¼öµÄÒ»ÖÖģʽ¡£ ½¡¿µ¼ì²éʱ Envoy Óë EnvoyÖ®¼äÊdz¤Á¬½Ó£¬ËûÃDz»»áÏûºÄÌ«´óÐÔÄÜ£»¶ÔÓÚ
upstream ½Úµã¶øÑÔ£¬ÔòÊÇÐÂÇëÇóÐÂÁ¬½Ó¡£
2.»ùÓÚ HTTP µÄ½¡¿µ¼ì²éÖ§³ÖÉí·ÝÈÏÖ¤¡£
Èç¹ûÄãÔÚÔÆÆ½Ì¨ÖÐÓÃÁË×îÖÕÒ»ÖÂÐԵķþÎñ·¢ÏÖ·þÎñ»òÕßÈÝÆ÷»·¾³ÖУ¬¸ÏÉÏ·þÎñˮƽÀ©Õ¹£¬Õâ¸öʱºòÆäÖÐÒ»¸ö½Úµã¹ÒµôºóÓÖ"»Øµ½Æ½Ì¨"ÇÒʹÓõÄÊÇͬһ¸ö
IP ÊÇÓпÉÄܵ쬵«ÊÇÈ·ÊDz»Í¬µÄ·þÎñ(ÔÚÈÝÆ÷·þÎñÖÐÓÈΪÃ÷ÏÔ)¡£Ò»ÖÖ½â¾ö·½°¸ÊÇ£¬¶Ô²»Í¬µÄ·þÎñʹÓò»Í¬µÄ½¡¿µ¼ì²éURL£¬µ«ÊÇÕâÖÖÅäÖø´ÔӶȷdz£¸ß¡£Envoy
²ÉÓõķ½°¸ÊÇÔÚ header ÖÐÌí¼ÓÒ»¸ö service_name Ñ¡ÏîÀ´Ö§³Ö¡£Èç¹ûÉèÖÃÁ˸ÃÑ¡ÏÔÚ½¡¿µ¼ì²éʱ»á¶Ô±È
header ÖÐµÄ x-envoy-upstream-healthchecked-cluster ÊÇ·ñºÍ¸ÃÑ¡ÏîֵƥÅ䣬Èç¹û²»Æ¥ÅäÔò»áºöÂÔ¸ÃÇëÇó¡£
3.L3/L4
»ùÓÚL3/L4²ãµÄ½¡¿µ¼ì²é, Envoy Ïò upstream ½Úµã·¢ËͶ¨ÒåºÃµÄÒ»¸ö×Ö·û´®.
Èç¹û upstream ½Úµã·µ»Ø¸ÃÖµ£¬Ôò´ú±í½¡¿µ, ·ñÔò²»½¡¿µ¡£
4.Redis
Envoy Ïò Redis ·¢ËÍÒ»¸ö PING ÃüÁî, ·µ»Ø PONG
´ú±í½¡¿µ, ÆäËüµÄ´ú±í²»½¡¿µ¡£
Passive health checking(¶Û̬¼ì²é)
Envoy ͨ¹ý Outlier detection ½øÐжÛ̬(ʵÔÚÊÇÕÒ²»³öÌ«ºÏÊʵĴÊ)¼ì²é
Outlier detection£¬ÓÃÀ´¼ì²éijЩ¼¯Èº³ÉÔ±ÔÚ¸ø¶¨·¶Î§ÄÚÊÇ·ñ¡°Õý³£¡±,²»Õý³£Ôò½«Æä´Ó¸ºÔؾùºâÁбíÖÐÒÆ³ý¡£
ÓÐʱºòÒ»¸ö½ÚµãËäÈ»ÔÚ½øÐÐÖ÷¶¯½¡¿µ¼ì²éÊÇÊÇÕý³£µÄ£¬µ«ÊÇ»á´æÔÚijЩ²»Õý³£µÄ״̬±»ÒÅ©µÄÇé¿ö£¬¶ø
Outlier detection ÔòÊÇÃÖ²¹Õâ¸ö¡°Â©¶´¡±µÄ ¡£Ëüͨ¹ý¸ú¸ß¼¶µÄһЩËã·¨À´Åж¨¸Ã½ÚµãÊÇ·ñÊÇÕý³£µÄ¡£
Outlier detection ÓÐÁ½ÖÖ¼ì²éÀàÐÍ£º
»ùÓÚÁ¬ÐøµÄ 5xx ´íÎóÂë
upstream ³ÉÔ±Á¬ÐøN´Î·µ»Ø5xx´íÎóÂë, NĬÈÏΪ5(¿ÉÅäÖÃ)¡£
»ùÓڳɹ¦ÂÊ
»ùÓڳɹ¦Âʵļì²éÔÚÁ½ÖÖÇé¿öÏÂÊDz»´¦ÀíµÄ£º
Õë¶Ô¼¯ÈºÖе¥¸ö½Úµã
µ¥¸ö½ÚµãµÄÇëÇóÊýÁ¿ÔÚ¾ÛºÏÇø¼äÄÚÉÙÓÚoutlier_detection.success_rate_request_volumeֵʱ(ĬÈÏ100)¡£
¼¯Èº¼¶±ð
¼¯ÈºÖÐ outlier_detection.success_rate_minimum_hosts
¸ö½ÚµãÔÚ¼ì²éÖÜÆÚÄÚÇëÇóÁ¿¶¼Ð¡ÓÚ outlier_detection.success_rate_request_volume
ʱ¡£
ÅäÖÃÏ
{
"consecutive_5xx": "...",
"interval_ms": "...",
"base_ejection_time_ms": "...",
"max_ejection_percent": "...",
"enforcing_consecutive_5xx" : "...",
"enforcing_success_rate" : "...",
"success_rate_minimum_hosts" : "...",
"success_rate_request_volume" :
"...",
"success_rate_stdev_factor" : "..."
} |
Ö÷¶¯½¡¿µ¼ì²éºÍ¶Û̬¼ì²é¿ÉÒÔÅäºÏʹÓã¬Ò²¿ÉÒÔµ¥¶ÀʹÓá£
Circuit breaking(¶Ï·Æ÷)
¶Ï·Æ÷ÊÇÒ»ÖÖ·Ö²¼Ê½µÄÏÞËÙ»úÖÆ£¬ËüÕë¶Ôÿ¸öupstreamµÄhostÉèÖã¬ÓÐʱºòÒ²ÐèÒªÕë¶ÔÕû¸öcluster½øÐÐÏÞÖÆ£¬
Õâ¸öʱºòÈ«¾ÖµÄÏÞËپͷdz£ÓбØÒªÁË¡£EnvoyÖ§³ÖÈ«¾ÖÏÞËÙ(L3/L4¡¢HTTP ¶¼Ö§³Ö)£¬ËüÓÐÒ»¸ö¼¯ÖеÄÏÞËÙ·þÎñ£¬
¶ÔÓÚµ½´ï¸Ã¼¯ÈºµÄÿ¸öÁ¬½Ó£¬¶¼»á´ÓÏÞËÙ·þÎñÄÇÀï²éѯȫ¾ÖÏÞËÙ½øÐÐÅжϡ£ Envoy ÊÇͨ¹ýÒ»¸öÈ«¾ÖµÄgRPCÏÞËÙ·þÎñÀ´ÊµÏÖÈ«¾ÖÏÞËÙ¡£Í¨¹ýredisÀ´×öºó¶Ë´æ´¢¡£
Envoy µÄ¶Ï·Æ÷¿ÉÒÔ¿ØÖÆ envoy Óë downstream
½ÚµãµÄ×î´óÁ¬½ÓÊý¡¢¼¯Èº×î´óÖ§³ÖµÄ pending ÇëÇóÊý¡¢¼¯Èº×î´óÖ§³ÖµÄÇëÇóÊý(ÊÊÓÃHTTP/2)¡¢¼¯Èº´æ»î×î´ó̽²â´ÎÊý¡£
¶Ï·Æ÷ÅäÖãº
{
"max_connections": "...",
"max_pending_requests": "...",
# ĬÈÏ 1024
"max_requests": "...",
# ĬÈÏ 1024
"max_retries": "...",
ĬÈÏ 3
} |
max_connections£ºEnvoy Óë upstream ¼¯ÈºËùÓнڵãÄܹ»½¨Á¢µÄ×î´óÁ¬½ÓÊýÁ¿¡£¸Ã²ÎÊýÊÊÓÃÓÚHTTP/1.1£¬ÒòΪHTTP/2ÊÇʹÓõ¥¸öÁ¬½ÓÓëÿ¸öhost½¨Á¬£¬Á¬½Ó¸´ÓÃ(ĬÈÏ1024)¡£
max_pending_requests: µÈ´ýÏ̳߳ØÓпÉÓÃÁ¬½ÓʱµÄ×î´óÅŶÓÇëÇóÊýÁ¿¡£¸Ã²ÎÊýÊÊÓÃÓÚHTTP/1.1£¬HTTP/2²ÉÓöà·¸´Ó÷½Ê½£¬ÎÞÐèÅŶÓÇëÇó(ĬÈÏ
1024)¡£
max_requests: ¸ø¶¨Ê±¼äÄÚ×î´óÇëÇóÊý£¬¸Ã²ÎÊýÊÊÓÃÓÚHTTP/2£¬HTTP/1.1 ͨ¹ýmax_connectionsÀ´ÏÞÖÆ¡£(ĬÈÏ
1024)¡£
max_retries: ¸ø¶¨Ê±¼äÄÚEnvoyÓëÇëÇóupstream¼¯ÈºÊ±µÄ×î´óÖØÊÔ´ÎÊý£¬¸ÃÖµ²»ÒËÉèÖùý´ó£¬ÖØÊÔ¹ý¶à¿ÉÄÜ»á´øÀ´¸ü¶àÆäËüµÄ¼¶Áª¹ÊÕÏ£¬ÉõÖÁµ¼ÖÂÑ©±À¡£(ĬÈÏ
3)¡£
ÈȸüÐÂ
¼ò»¯²Ù×÷ÊÇEnvoyÒ»¸ö·Ç³£ÖØÒªµÄÉè¼ÆÄ¿±ê¡£³ýÁËÇ¿´óµÄͳ¼ÆºÍ±¾µØ¹ÜÀí½Ó¿Ú£¬
Envoy»¹¾ß±¸×ÔÉíÈÈÖØÆôµÄ¹¦ÄÜ¡£ ÕâÒâζ×Å Envoy Äܹ»È«×Ô¶¯µÄ¸üÐÂ×Ô¼º(°üÀ¨´úÂëºÍÅäÖõıä¸ü)£¬¶ø²»»á¶ªÊ§ÈκÎÁ¬½Ó¡£
¿´ÏÂÈȸüеĹý³Ì:
ͳ¼ÆÊý¾ÝºÍһЩlock¶¼·Åµ½Á˹²ÏíÄÚ´æÖС£½ø³ÌÔÚÖØÆôʱÕâЩÊý¾ÝÊdz־õ쬲»»á¶ªÊ§¡£
оɽø³Ìͨ¹ýRPCÐÒé½øÐÐͨÐÅ¡£
еĽø³ÌÔڽӹܾɽø³ÌµÄunix domain socketǰ£¬ÏÈÍê³ÉһϵÁеijõʼ»¯(±ÈÈ磺¼ÓÔØÅäÖÃ,
³õʼ»¯·þÎñ·¢Ïֺͽ¡¿µ¼ì²é, ÆäËü)¡£È»ºó£¬ÐµĽø³Ì¿ªÊ¼¼àÌý·þÎñ£¬²¢¸æËßÀϵÄEnvoy½ø³Ì½øÈëÇýÖð½×¶Î¡£
Ôھɽø³ÌÇýÖð½×¶Î, ¾ÉµÄ½ø³Ì³¢ÊÔÆ½»¬µÄ¹Ø±ÕÒÑ´æÔÚµÄÁ¬½Ó¡£¾ßÌåÈçºÎ×öÒªÒÀÀµÓÚÅäÖõÄfilters¡£
--drain-time-s ÅäÖÃÏîÓÃÀ´ÅäÖõȴýƽ»¬Í˳öµÄʱ¼ä¡£Èç¹ûƽ»¬Í˳ö»¨·ÑµÄʱ¼ä³¬¹ýÁËÕâ¸öÖµ£¬½ø³Ì»áÇ¿ÖÆ¹Ø±ÕºÍ»ØÊÕ¡£
ÇýÖð¹ý³Ì½áÊøºó, еÄEnvoy½ø³Ì¸æË߾ɵÄEnvoy½ø³Ì¹Ø±Õ×Ô¼º¡£²ÎÊý --parent-shutdown-time-s
ÓÃÀ´ÅäÖùرÕ×Ô¼ºµÄ³¬Ê±Ê±¼ä¡£
Envoy µÄÈÈÖØÆôµÄÉè¼ÆÖ§³ÖÐÂÀϽø³Ìͬʱ´æÔÚʱҲÄÜÕý³£¹¤×÷¡£Ð¾ɽø³ÌÖ®¼äµÄͨÐÅÖ»ÄÜÊÇͨ¹ýunix
domain socket¡£
Envoy ²¿Êð·½Ê½
ÕâÒ»¿éÊÇ´ó¼Ò¹Ø×¢µÄÖØµã£¬Ò²¾ÍÊÇÓ¦ÓóÌÐòÈçºÎÓë Envoy ½áºÏÀ´Ê¹Óõġ¢ÇëÇóÊÇÈçºÎתµ½ Envoy
µÄµÈµÈ¡£
¸ù¾Ý²»Í¬µÄʹÓó¡¾°£¬EnvoyÓв»Í¬µÄ²¿Êð·½Ê½¡£
Service to service only
ÕâÊÇ×î¼òµ¥µÄ²¿ÊðºÍʹÓ÷½Ê½£¬ÔÚÕâÖÖ·½Ê½ÖÐ Envoy ×÷ΪÄÚ²¿ÓëÍⲿ·þÎñͨÐŵÄ×ÜÏß¡£Envoy Æô¶¯¶à¸ö
listeners ÓÃÓÚ±¾µØÁ÷Á¿×ª·¢ºÍ·þÎñÓë·þÎñÖ®¼äµÄÁ÷Á¿×ª·¢¡£

ÉÏͼչʾÁË×î¼òµ¥µÄ Envoy ²¿Êð·½Ê½¡£ÔÚÕâÖÖ²¿Êð·½Ê½ÖÐ Envoy
³Ðµ£µÄÊÇSOA·þÎñÄÚ²¿Á÷Á¿µÄÏûÏ¢×ÜÏß½ÇÉ«¡£ÔÚÕâÖÖ³¡¾°ÖУ¬ Envoy »á±©Â¶Ò»Ð© listeners
ÓÃÓÚ±¾µØÁ÷Á¿»òÕß±¾µØ·þÎñÓëÔ¶¶Ë·þÎñÖ®¼äÁ÷Á¿µÄת·¢¡£
listener ÀàÐÍ£º
Service to service egress listener
±¾µØ·þÎñµ½Ô¶¶Ë·þÎñµÄ³ö¿Ú listener¡£¸ÃÀàÐÍ listener
»á¼àÌýÔÚij¸öÖ¸¶¨µÄ¶Ë¿ÚÉÏ£¬ËùÓÐÄÚ²¿Ó¦ÓóöÈ¥µÄÇëÇó¶¼Öض¨Ïòµ½¸Ã¶Ë¿ÚÉÏ£¬Óɸà listener ´¦Àí²¢×ª·¢µ½Ä¿µÄ·þÎñ¼¯Èº½Úµã¡£
ÀýÈ磺http://localhost:9001 »ò tcp://localhost:9001¡£
HTTP ºÍ gRPC ÀàÐÍÇëÇóʹÓà host header£¬HTTP/2ʹÓà authority
header À´Ö¸¶¨·ÃÎʵÄÔ¶¶Ë·þÎñ¼¯Èº¡£ ÔÚÊý¾ÝÁ÷¾ Envoy ¹ý³ÌÖÐ»á½øÐзþÎñ·¢ÏÖ¡¢¸ºÔؾùºâ¡¢ÏÞËٵȴ¦Àí¡£
±¾µØ Services Ö»ÐèÒªÖªµÀ±¾µØµÄEnvoy£¬ÎÞÐè¹ØÐÄËüÃÇ×Ô¼ºËù´¦µÄÍøÂçÍØÆË¼°»·¾³¡£
Service to service ingress listener
±¾µØ·þÎñµ½Ô¶¶Ë·þÎñµÄÈë¿Ú listener¡£¸Ã listener ÌṩԶ¶Ë
Envoy µ÷Óñ¾µØ Envoy µÄ¶Ë¿Ú¡£
ÀýÈ磺http://localhost:9211¡£ ½øÈë±¾µØ Envoy
µÄÇëÇó¶¼±»Â·ÓÉ/ÖØ¶¨Ïòµ½±¾µØ service µÄ¼àÌý¶Ë¿Ú¡£¸ù¾ÝÐèÒª£¬±¾µØµÄEnvoy »á½øÐÐһЩ»º´æ¡¢¶Ï·¼ì²éµÈ´¦Àí¡£
Optional external service egress listeners
ÓÐʱ£¬ÐèÒª·ÃÎÊÍⲿµÄ·þÎñ£¬´ËʱÐèÒªÌṩһ¸ö¶Ë¿ÚÌṩ·ÃÎÊ¡£ÒòΪ£¬ÓÐЩÍⲿ·þÎñSDK²»Ö§³Öhost
headerµÄÖØÐ´À´Ö§³Ö±ê×¼µÄHTTP·´Ïò´úÀíÐÐΪ¡£
ÀýÈ磺http://localhost:9250 might be
allocated for connections destined for DynamoDB.ÎÒÃǽ¨ÒéΪËùÓÐÍⲿ·þÎñʹÓñ¾µØ¶Ë¿Ú·ÓÉ£¬¶ø²»ÊÇʹÓÃÖ÷»ú·ÓɺÍרÓñ¾µØ¶Ë¿Ú·ÓÉ
Discovery service integration
¼¯³ÉÍⲿ·þÎñ·¢ÏÖ×é¼þÀ´Ìṩ·þÎñµ½·þÎñµÄ·¢ÏÖ¹¦ÄÜ¡£
service
to service ģʽÅäÖÃÄ£°å

ÉÏͼչʾÁËÔÚ service to service ģʽǰÔö¼Ó Envoy
¼¯Èº×÷Ϊ7²ã·´Ïò´úÀíµÄ²¿Êðģʽ¡£
¸Ã²¿ÊðģʽÓÐÒÔÏÂÌØµã£º
TLS Ð¶ÔØ
ͬʱ֧³Ö HTTP/1.1 ºÍ HTTP/2
ÍêÕûµÄ HTTP 7²ã·ÓÉÖ§³Ö
ǰ¶ËµÄ Envoy ´úÀí¼¯ÈºÊ¹Óñê×¼µÄ ingress ¶Ë¿ÚÓëºó¶ËµÄ
service to service ¼¯ÈºÍ¨ÐÅ¡£¶ÔÓÚºó¶Ë·þÎñ¼¯Èº½ÚµãʹÓ÷þÎñ·¢ÏÖ·½Ê½»ñÈ¡¡£Ç°¶ËµÄ Envoy
¼¯Èº½ÚµãÊÇÍêÈ«¶ÔµÈµÄÌṩ·þÎñ£¬Ã»ÓÐÈκβîÒì¡£
ÕâÖÖ·½Ê½ºÍ service to service ·½Ê½Ïà±È¶à³öÁË Ç°¶ËÆß²ã´úÀíµÄ²¿·Ö¡£¿ÉÒÔÊÊÅä¸ü¶àµÄʹÓó¡¾°¡£
Service to service plus front proxy ÅäÖÃÄ£°å

Ë«´úÀíģʽ
Ë«´úÀíģʽµÄÉè¼ÆÀíÄîÊÇ£º ¸ü¼Ó¸ßЧµÄÐ¶ÔØTLS¡¢¸ü¿ìËÙµÄÓëclient¶Ë½¨Á¢Á¬½Ó£¨¸ü¶ÌµÄTLSÎÕÊÖʱ¼ä£¬¸ü¿ìµÄTCPÓµÈû´°¿Úµ÷Õû£¬¸üÉٵĶª°üµÈµÈ£©¡£
ÕâЩÔÚË«´úÀíÉÏÐ¶ÔØTLSºóµÄÁ¬½Ó×îÖÕ¶¼»á¸´Óà ÒѾÓëÊý¾ÝÖÐÐÄÍê³ÉÁ¬½Ó½¨Á¢µÄ HTTP/2 Á¬½Ó¡£
Service
to service, front proxy, and double proxy ÅäÖÃÄ£°å
×ܽá
ÒÔÉϾÍÊÇServiceMesh Êý¾ÝÃæ°å EnvoyµÄ»ù±¾½éÉÜ¡£
|