±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚÍøÂ磬½éÉÜÁËÓ¦ÓÃÔÀí£¬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 |
Ч¹ûͼ
¿ØÖÆÃæ°å£º

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

¼à¿Ø½çÃæ£º

|