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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Ïê½âk8s×é¼þIngress±ßԵ·ÓÉÆ÷²¢Â䵨µ½Î¢·þÎñ - kubernetes
 
  3035  次浏览      29
 2018-5-14 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚÍøÂ磬½éÉÜÁËÓ¦ÓÃÔ­Àí£¬Ingress Ñ¡ÐÍ£¬´´½¨Ingress×ÊÔ´¶ÔÏó£¬ÌØÐÔÅäÖõÈ֪ʶ¡£

дÔÚÇ°Ãæ

Ingress Ó¢ÎÄ·­Òë½øÈë;½øÈëȨ;½øÊ³£¬¸ü׼ȷµÄ½²¾ÍÊÇÈë¿Ú£¬¼´ÍⲿÁ÷Á¿½øÈëk8s¼¯Èº±Ø¾­Ö®¿Ú¡£Õâµ½´óÃŵ½µ×ÓÐʲô×÷Óã¿ÎÒÃÇÈçºÎʹÓÃIngress£¿k8sÓÖÊÇÈçºÎ½øÐзþÎñ·¢ÏÖµÄÄØ£¿ÏÈ¿´Ò»ÕÅͼ£º

Ô­Àí

ËäÈ»k8s¼¯ÈºÄÚ²¿ÊðµÄpod¡¢server¶¼ÓÐ×Ô¼ºµÄIP£¬µ«ÊÇÈ´ÎÞ·¨ÌṩÍâÍø·ÃÎÊ£¬ÒÔǰÎÒÃÇ¿ÉÒÔͨ¹ý¼àÌýNodePortµÄ·½Ê½±©Â¶·þÎñ£¬µ«ÊÇÕâÖÖ·½Ê½²¢²»Áé»î£¬Éú²ú»·¾³Ò²²»½¨ÒéʹÓá£IngresssÊÇk8s¼¯ÈºÖеÄÒ»¸öAPI×ÊÔ´¶ÔÏ󣬰çÑݱßԵ·ÓÉÆ÷(edge router)µÄ½ÇÉ«£¬Ò²¿ÉÒÔÀí½âΪ¼¯Èº·À»ðǽ¡¢¼¯ÈºÍø¹Ø£¬ÎÒÃÇ¿ÉÒÔ×Ô¶¨Òå·ÓɹæÔòÀ´×ª·¢¡¢¹ÜÀí¡¢±©Â¶·þÎñ(Ò»×épod)£¬·Ç³£Áé»î£¬Éú²ú»·¾³½¨ÒéʹÓÃÕâÖÖ·½Ê½¡£ÁíÍâLoadBlancerÒ²¿ÉÒÔ±©Â¶·þÎñ£¬²»¹ýÕâÖÖ·½Ê½ÐèÒªÏòÔÆÆ½Ì¨ÉêÇ븺ծ¾ùºâÆ÷£»ËäȻĿǰºÜ¶àÔÆÆ½Ì¨¶¼Ö§³Ö£¬µ«ÊÇÕâÖÖ·½Ê½Éî¶ÈñîºÏÁËÔÆÆ½Ì¨£¬ËùÒÔÄã¶®µÄ¡£

Ê×ÏÈÎÒÃÇÀ´Ë¼¿¼Óô«Í³µÄweb·þÎñÆ÷£¬±ÈÈçNginx£¬ÈçºÎ´¦ÀíÕâÖÖ³¡¾°£¿

Nginx³äµ±Ò»¸ö·´Ïò´úÀí·þÎñÆ÷À¹½ØÍⲿÇëÇ󣬶Áȡ·ÓɹæÔòÅäÖã¬×ª·¢ÏàÓ¦µÄÇëÇ󵽺ó¶Ë·þÎñ¡£

kubernetes´¦ÀíÕâÖÖ³¡¾°Ê±£¬Éæ¼°µ½Èý¸ö×é¼þ£º

1.·´Ïò´úÀíweb·þÎñÆ÷

¸ºÔðÀ¹½ØÍⲿÇëÇ󣬱ÈÈçNginx¡¢Apache¡¢traefikµÈµÈ¡£ÎÒÒ»°ãÒÔDeployment·½Ê½²¿Êðµ½kubernetes¼¯ÈºÖУ¬µ±È»Ò²¿ÉÒÔÓÃDeamonSet·½Ê½²¿Êð£»ÕâÁ½ÖÖ²¿Êð·½Ê½¸öÈ˾õµÃÓÐÀûÓбף¬¸ÐÐËȤµÄÇë²Î¿¼ÕâÆªÎÄÕ£¬ÕâÀï¾Í²»°½ÊöÁË¡£

2.Ingress controller

k8sÖеÄcontrollerÓкܶ࣬±ÈÈçCronJob¡¢DeamonSet¡¢Deployment¡¢ReplicationSet¡¢StatefulSetµÈµÈ£¬´ó¼Ò×îÊìϤµÄÓ¦¸ÃÊÇDeployment(ºÙºÙ£¬ÎÒÒ²ÊÇ)£¬ËüµÄ×÷ÓþÍÊÇ¼à¿Ø¼¯ÈºµÄ±ä»¯£¬Ê¹¼¯ÈºÊ¼ÖÕ±£³ÖÎÒÃÇÆÚÍûµÄ×îÖÕ״̬(ymlÎļþ)¡£Í¬Àí£¬Ingress controllerµÄ×÷ÓþÍÊÇʵʱ¸ÐÖªIngress·ÓɹæÔò¼¯ºÏµÄ±ä»¯£¬ÔÙÓëApi Server½»»¥£¬»ñÈ¡Service¡¢PodÔÚ¼¯ÈºÖÐµÄ IPµÈÐÅÏ¢£¬È»ºó·¢Ë͸ø·´Ïò´úÀíweb·þÎñÆ÷£¬Ë¢ÐÂÆä·ÓÉÅäÖÃÐÅÏ¢£¬Õâ¾ÍÊÇËüµÄ·þÎñ·¢ÏÖ»úÖÆ¡£

3.Ingress

¶¨Òå·ÓɹæÔò¼¯ºÏ£¬ÉÏÃæÒѾ­Ïêϸ½éÉÜ£¬ÕâÀï¾Í²»ÔÙ°½ÊöÁË¡£

¾­¹ýÉÏÃæµÄÆÊÎö£¬ÖªµÀÁ˰ɣ¬Èç¹ûÎÒÃǽö½ö´´½¨Ingress¶ÔÏó£¬Ö»ÊǶ¨ÒåÁËһϵÁзÓɹæÔò¼¯ºÏ¶øÇÒ£¬Ã»ÓÐÈκÎ×÷Ó㬲»ÒªÏëµÃÌ«¼òµ¥ÁË£¬ºÙºÙ¡£

Ingress Ñ¡ÐÍ

Õâ¸öÎÒ»¨·ÑÁ˲»ÉÙʱ¼ä£¬×îÖÕÑ¡ÓõÄÊÇTraefik£¬ËüÊÇÒ»¸öÓÃGolang¿ª·¢µÄÇáÁ¿¼¶µÄHttp·´Ïò´úÀíºÍ¸ºÔؾùºâÆ÷£¬ËäÈ»Ïà±ÈÓÚNginx£¬ËüÊǺóÆðÖ®Ð㣬µ«ÊÇËüÌìȻӵ±§kubernetes£¬Ö±½ÓÓ뼯Ⱥk8sµÄApi ServerͨÐÅ£¬·´Ó¦·Ç³£Ñ¸ËÙ£¬ÊµÊ±¸ÐÖª¼¯ÈºÖÐIngress¶¨ÒåµÄ·ÓɹæÔò¼¯ºÏºÍºó¶ËService¡¢PodµÄ±ä»¯£¬×Ô¶¯ÈȸüÐÂTraefikºó¶ËÅäÖ㬸ù±¾²»Óô´½¨Ingress controller¶ÔÏó£¬Í¬Ê±»¹ÌṩÁËÓѺõĿØÖÆÃæ°åºÍ¼à¿Ø½çÃæ£¬²»½ö¿ÉÒÔ·½±ãµØ²é¿´Traefik¸ù¾ÝIngressÉú³ÉµÄ·ÓÉÅäÖÃÐÅÏ¢£¬»¹¿ÉÒԲ鿴ͳ¼ÆµÄһЩÐÔÄÜÖ¸±êÊý¾Ý£¬È磺×ÜÏìӦʱ¼ä¡¢Æ½¾ùÏìӦʱ¼ä¡¢²»Í¬µÄÏìÓ¦Âë·µ»ØµÄ×Ü´ÎÊýµÈ£¬Traefik²¿ÊðÇë²Î¿¼¹ÙÍøÓû§Ê¾ÀýKubernetes Ingress Controller¡£²»½öÈç´Ë£¬Traefik»¹Ö§³Ö·á¸»µÄannotationsÅäÖ㬿ÉÅäÖÃÖÚ¶à³öÉ«µÄÌØÐÔ£¬ÀýÈ磺×Ô¶¯ÈÛ¶Ï¡¢¸ºÔؾùºâ²ßÂÔ¡¢ºÚÃûµ¥¡¢°×Ãûµ¥£»»¹Ö§³ÖÐí¶àºó¶Ë´æ´¢£¬È磺zookeeper¡¢eureka¡¢consul¡¢rancher¡¢dockerµÈ£¬Ëü»á×Ô¶¯¸ÐÖªÕâЩͳһÅäÖÃÖÐÐĵı仯£¬ÈȸüÐÂ×Ô¼ºµÄ·ÓÉÅäÖã¬ËùÒÔTraefik¶ÔÓÚ΢·þÎñÀ´Ëµ¼òÖ±¾ÍÊÇÒ»ÉñÆ÷°¡£¬ºÙºÙ¡£¶øNginxÔÚÓµ±§kubernetesÕâ·½Ãæ±È½ÏºóÖªºó¾õ£¬ÏêÇéÇë²Î¿¼¹Ù·½ÍøÕ¾ºÍ¿ªÔ´ÏîÄ¿ingress-nginx £»ÁíÍâ΢Èí¿ªÔ´µÄ΢·þÎñʾÀýÏîÄ¿ eShopOnContainers ²ÉÓÃÁËingress-nginx£¬´ó¼Ò¿ÉÒÔÏÂÈ¥×ÔÐÐÑо¿¡£

Traefik£º

ʾÀý˵Ã÷

´´½¨Ingress×ÊÔ´¶ÔÏó

apiVersion: extensions /v1beta1
kind: Ingress
metadata:
labels:
app: light
component: frontend
name: light-edge-router
namespace: geekbuying-light
annotations:
kubernetes.io/ ingress.class: "traefik"
ingress.kubernetes.io/ssl- redirect: "false"
traefik.frontend.rule.type: "PathPrefixStrip"
traefik.ingress.kubernetes.io /frontend -entry-points: "http ,https"
traefik.ingress.kubernetes.io / priority: "3"
spec:
rules:
- host: <hostdomain literal>
http:
paths:
- path: /api/v1/light
backend:
serviceName: aggregation -light-api
servicePort: 80
- path: /api/v1/identity
backend:
serviceName: identity-api
servicePort: 80

·Ç³£ÖØÒª£ºµ±ÎÒÃǶ¨Òå¶îÍâµÄ·ÓÉʱ£¬±ÈÈçÕâÀïµÄ/api/vi/identity£¬±ØÐëÌí¼ÓÕâ¸ötraefik.ingress.kubernetes.io/rule-type: PathPrefixStrip×¢½â´«µÝ·¾¶£¬·ñÔò»á¿´²»µ½ÈκÎЧ¹û£»ingress.kubernetes.io/ssl-redirect: "false"ÊÇ·ñÇ¿ÖÆÊ¹ÓÃhttps£¬ÆäËûµÄÅäÖÃÐÅÏ¢£¬Çë²é¿´ÏêÇé¡£ÁíÍ⣬²»Í¬µÄIngressÑ¡ÐÍ£¬Çë²ÎÕÕ¸÷×ÔµÄ×é¼þ˵Ã÷¡£

ÌØÐÔÅäÖÃ

traefikÖ§³ÖÇ¿´óµÄannotationsÅäÖã¬ÐèÒªÌí¼Óµ½kubernetesÏàÓ¦×ÊÔ´¶ÔÏóµÄannotationsÏÂÃæ¡£ÖÁÓÚÅäÖõ½¾ßÌåµÄÄĸö¶ÔÏó£¬ÄÇôÎÒÃÇÐèÒªÏÈŪÇå³þÈý¸ö¸ÅÄ

EntryPoint(Èë¿Úµã)

¹ËÃû˼Ò壬ÕâÊÇÍâ²¿ÍøÂç½øÈëtraefikµÄÈë¿Ú£¬ÎÒÃÇÉÏÃæ¾ÍÊÇͨ¹ý¼àÌýÖ÷»ú¶Ë¿ÚÀ¹½ØÇëÇó¡£

FrontEnd(ǰ¶Ë)

traefikÀ¹½ØÇëÇóºó£¬»áת·¢¸øFrontEnd¡£Ç°¶Ë¶¨ÒåEntryPointÓ³Éäµ½BackEndµÄ·ÓɹæÔò¼¯£¬×ֶΰüÀ¨Host, Path, Headers µÈ£¬Æ¥ÅäÇëÇóºó£¬Ä¬ÈÏͨ¹ý¼ÓȨÂÖѯ¸ºÔØË㷨·Óɵ½Ò»¸ö¿ÉÓõÄBackEnd£¬È»ºó½øÈëÖ¸¶¨µÄ΢·þÎñ£¬Õâ¾ÍÊÇ·þÎñ·¢ÏÖ¡£

±¸×¢£ºÕâЩ·ÓɹæÔò¿ÉÒÔÀ´×Ô²»Í¬µÄºó¶Ë´æ´¢£¬ÈçKubernetes¡¢zookeeper¡¢eureka¡¢consulµÈ£¬KubernetesʹÓõÄIngress×ÊÔ´¶ÔÏó¶¨Òå·ÓɹæÔò¼¯¡£½¨Òé´ó¼Ò×ÔÐÐÈ¥¹ÙÍøÑ§Ï°Kubernetes Ingress Backend¡£

BackEnd(ºó¶Ë)

Ò»×éhttp·þÎñ¼¯£¬kubernetesÖжÔÓ¦Ò»¸öservice¶ÔÏóϵÄÒ»×épodµØÖ·¡£¶ÔÓÚºó¶ËµÄ·þÎñ·¢ÏÖ£¬¿ÉÅäÖøºÔؾùºâ²ßÂÔ¡¢ÈÛ¶ÏÆ÷µÈÌØÐÔ¡£

Ò»¸öºó¶Ëservice¶ÔÏóµÄÅäÖÃÀý×Ó£º

apiVersion: v1
kind: Service
metadata:
name: identity-api
namespace: geekbuying-light
labels:
app: light
component: identity
annotations:
traefik.backend.circuitbreaker: " NetworkErrorRatio() > 0.5"
traefik.backend.loadbalancer. method: drr
spec:
selector:
app: light
component: identity
type: webapi
ports:
- port: 80

Ч¹ûͼ

¿ØÖÆÃæ°å£º

ǰ¶ËÓÅÏȼ¶¡¢ÈÛ¶ÏÆ÷¡¢¸ºÔؾùºâ²ßÂÔ£º

¼à¿Ø½çÃæ£º

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

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤