k8s部署nginx的url反向代理初探

  团队中做一个项目,使用Django开发多个应用,如app1、app2等,均采用docker镜像部署到k8s环境中,整体架构为:

  常规处理方案:

  此种方案简单清晰,对于api接口及静态页面(如django中的admin管理台页面)不会产生任何问题,因为一个app对应一个域名,从逻辑上看是一对一的访问,app之间互相隔离。

  有了这些问题,那么我们就尝试用url前缀去识别路由分发,实现通过url前缀进行反向代理,而不是通过域名去反向代理。
  比如/A/xxx这种url就路由到app1,/B/xxx这种url就路由到app2,依次类推。
  刚开始配置还是很简单的,nginx配置如下:

  此配置大概意思是当匹配到带/A/这种前缀的url时,就将请求路由到app1_addr:app1_port/中。具体location指令请参考nginx手册。

  api接口访问正常,但在请求 http://abc.com.cn:8080/A/admin/ ,使用django自带的管理台时,无法进行302的跳转。在新的url页面无法访问。
  经分析,过程是这样的:

  此问题出现在第4步,需要nginx在遇到301或302时,重新修改response header中location值,这样浏览器就能按添加前缀/A/后的url进行请求了。
  修改配置后如下:

  新增加一行proxy_redirect指令,具体指令说明请参见nginx手册,大概意思是告诉nginx,当遇到301或302服务器端重定向时,按^/(.*)$进行正则匹配,即匹配/xxxx这种url。当匹配成功后,将响应header中location值修改成 http://abc.com.cn:8080/A/$1 ,再将响应继续返回给浏览器。其中$1表示正则匹配中(...)中的元组序号。
  当然,根据实际需求,还可以再添加多个proxy_rediect指令,原理一样:

  现在api、admin管理台能访问了,但发现管理台的js/css/html/jpg这些静态资源都访问失败。
  分析如下,当django返回html到浏览器后,浏览器会解析html中静态资源url并请求,此时静态资源的url为/static/admin/xx/x.js或/admin/xxx/xxx这种格式。浏览器去请求这些url当然不存在,nginx便会直接报不存在资源。
  此时,可以有两种方案:

  第一种方法找了找,发现不好修改,毕竟admin是django集成在安装包中的,工程里并不会去直接继承或二次封装admin模块,因此放弃了。
  第二种方法找到了nginx中sub_filter指令,再次修改如下:

  新增加sub_filter*三行指令,具体指令用法请参见手册,大概意思是nginx根据sub_filter_types(本文没写,默认是text/html),去检查每次的响应内容,若内容为text/html,则进行替换操作,将响应内容中的【/admin/】字符串替换成【/A/admin/】字符串,即增加前缀操作,static同理。最后再添加sub_filter_once off;表明上面的替换是替换响应内容的所有地方,如果不加这句指令,则只会替换一次。
  若工程中还存在其它子应用的静态工程,也可照此来进行替换操作。
  这种替换后,原工程不用修改,不影响本地开发调试,感觉还是不错的。

  现在api接口、admin管理台都能正常访问了。完成了通过url前缀方式来反向代理功能。
  实现了浏览器或外部系统只需要通过
http://abc.com.cn:8080/A/xxxx
http://abc.com.cn:8080/B/xxxx
http://abc.com.cn:8080/C/xxxx
  这种格式的URL访问即可,只需一个域名,仅通过/A/这种前缀来区分不同的子应用。
  一般我们会使用前后端分离去开发项目,若有必要,也可以使用sub_filter去替换相应的请求内容。

  • k8s绯诲垪02-kubeadm閮ㄧ讲flannel缃戠粶鐨刱8s闆嗙兢
    绛旓細flannel 搴旇鏄紬澶氬紑婧愮殑CNI鎻掍欢涓叆闂ㄩ棬妲涙渶浣庣殑CNI涔嬩竴浜嗭紝閮ㄧ讲绠鍗曪紝鍘熺悊鏄撴噦锛屼笖鐩稿叧鐨勬枃妗e湪缃戠粶涓婁篃闈炲父涓板瘜銆傞拡瀵 kube-flannel.yml 鏂囦欢锛屾垜浠渶瑕佷慨鏀逛竴浜 鍙傛暟 浠ラ傞厤鎴戜滑鐨勯泦缇わ細淇敼瀹屾垚涔嬪悗鎴戜滑鐩存帴閮ㄧ讲鍗冲彲 闆嗙兢閮ㄧ讲瀹屾垚涔嬪悗鎴戜滑鍦k8s闆嗙兢涓儴缃蹭竴涓nginx娴嬭瘯涓涓嬫槸鍚﹁兘澶熸甯稿伐浣溿傞鍏堟垜浠垱寤...
  • 鍩轰簬Linux鑷繁鍒濇鎼缓Kubernetes(k8s)闆嗙兢鍩虹,璇︾粏鏁欑▼
    绛旓細濡傦細鍘熷洜鏄姞鍏ヨ繃涓昏妭鐐癸紝鍗充娇娌℃垚鍔熷姞鍏ワ紝鏂囦欢涔熶細鍒涘缓锛屾墍浠ラ渶瑕侀噸缃妭鐐癸紝閲嶆柊鍔犲叆鍗冲彲锛岄噸缃懡浠わ細3锛屽湪master鏌ョ湅鑺傜偣 鍔犲叆瀹屾垚鍚庯紝鍦╩aster鑺傜偣 kubectl get node 鍙煡鐪嬪凡鍔犲叆鐨勬墍鏈夎妭鐐癸細杩欓噷k8s闆嗙兢鍒涘缓瀹屾垚锛屼笅涓姝ヤ娇鐢ㄥ彲鍙傝冩垜鐨勪笅涓绡囨枃绔狅細k8s鍒濇鐔熸倝浣跨敤浠嬬粛锛屽疄璺垫惌寤nginx闆嗙兢 ...
  • 瓒呭叏K8s鍏ラ棬杩涢樁鏁欑▼-杩愯|閮ㄧ讲|鐩戞帶|瀹炴垬涓鏂囨悶瀹!
    绛旓細鏂囩珷娣卞叆娴呭嚭鍦拌瑙o紝浠庡熀纭瀹夎鍒板疄鎴樺簲鐢紝娑电洊浜7閮ㄥ垎鍐呭锛氬熀纭瀹夎銆佽繍琛屾満鍒躲nginx鍜宼omcat绀轰緥銆佽繍缁寸鐞嗐佹寔缁泦鎴愪笌閮ㄧ讲銆佺洃鎺т笌鎶ヨ锛屼互鍙婁笁澶у疄鎴樻渚嬶紝涓哄涔犺呮彁渚涗簡涓板瘜鐨勫疄璺垫寚瀵笺傚湪IP鍦板潃绠$悊涓婏紝Kubernetes閲囩敤IP-per-Pod妯″瀷锛屾瘡涓狿od閮芥湁鑷繁鐨勭嫭绔婭P锛屼娇寰楀鍣ㄩ棿閫氫俊鏇翠负鐩存帴锛岀鍚堢壒瀹...
  • k8s澶氶泦缇ゅ垎鍙戞柟妗坘armada瑙f瀽
    绛旓細姣斿鐜板湪鎴戜滑淇敼cluster1涓殑deployment鐨刬mage涓 nginx:test 锛岀敤鏉ュ仛涓涓伆搴﹀彂甯冦傚垯鎴戜滑鍙互鍒涘缓涓涓涓嬬殑 OverridePolicy 锛氬垯鏂扮殑閮ㄧ讲缁撴灉濡備笅鍥撅細閫氳繃闃呰Karmada鐨勬簮鐮佸悗锛屾暣鐞嗕簡鏁翠釜鐨勫璞″鐞嗘祦绋嬪涓嬪浘鎵绀 閫氳繃瀵筀armada鐨勬枃妗e拰婧愮爜鍒嗘瀽锛孠armada鐩稿浜巏ubefed v2鐨勬渶澶т紭鐐癸細 瀹屽叏鍏煎k8s鐨...
  • 浣犵湡鐨勬悶娓呮k8s鐨subpath浜嗗悧?
    绛旓細鍥炲埌涓婚锛岄偅涔堣繖涓猻ubpath鏄浣曞疄鐜扮殑锛 鎴戜滑鍏堢湅杩欐牱涓涓緥瀛愩傚綋鎴戜滑鐧诲綍鍒板鍣ㄩ噷闈㈠悗锛屽彲浠ョ湅鍒 /mnt/aaa/bbb 鍜 /mnt/ccc/ddd 杩欎袱涓洰褰曪紝鍦ㄥ涓绘満涓婂彲浠ョ湅鍒 /srv/aaa/bbb 鍜 /srv/aaa/eee鐩綍銆傝繖涓猻ubpath 鍏跺疄鏄垜浠瓨鍌ㄧ殑subpath锛k8s 浼氬湪瀛樺偍鐨勭洰褰曚笅鎵惧杩欎釜鏂囦欢鎴栬呯洰褰曪紝濡傛灉涓...
  • k8s閮ㄧ讲springboot椤圭洰
    绛旓細鐜鍜屽墠闈腑 kubeadm 鎼缓 k8s 鐨勪竴鑷 鐪佺暐鍒涘缓椤圭洰姝ラ 鎻愪緵涓涓 /k8s/hello 鎺ュ彛 鎺ユ敹涓涓 name 鍙傛暟锛屾墦鍗板苟涓旇繑鍥 鍙互鐪嬪埌 2涓 鍓湰pod 宸茬粡Running 璁块棶鍓 闇瑕佸厛鎶 springboot.demo.com 鍩熷悕娣诲姞鍒 瀹夸富鏈虹殑 /etc/hosts涓 淇濊瘉鍙互姝e父瑙f瀽鍒 ingress-nginx閭e彴鏈哄櫒涓婄殑nginx 鍗冲彲 锛堜笉璇 ...
  • 淇濆绾k8s闆嗙兢瀹夎鏁欑▼
    绛旓細鐩戞帶涓庤礋杞藉潎琛★細閮ㄧ讲Nginx+Keepalived锛屽疄鐜k8s-api-server鐨勯珮鍙敤鎬с 閮ㄧ讲宸ュ叿涓庣鐞嗭細浣跨敤Helm瀹夎鍜岀鐞咾ubernetes搴旂敤锛屽dashboard鍜宨ngress銆 璇︾粏姝ラ鍜岄摼鎺ュ凡鍒犻櫎锛屼絾浠ヤ笂姒傝堪浜嗗叧閿楠ゃ傚畬鏁存暀绋嬩笌璇︾粏鎿嶄綔鍙弬鑰冨師鏂囬摼鎺ワ細hi-linux.com/92c2s锛屽苟璇峰叧娉℅olang鎶鏈疄楠屽鑾峰彇鏇村鍐呭銆傛湰鏂...
  • k8s 璧癷ngress鏈嶅姟鎻愮ず鏂囦欢杩囧ぇ,杩炴帴瓒呮椂绛夎В鍐虫柟娉
    绛旓細nginx.ingress.kubernetes.io/proxy-body-size: 500m nginx.ingress.kubernetes.io/proxy-connect-timeout: 180 nginx.ingress.kubernetes.io/proxy-read-timeout: 180 nginx.ingress.kubernetes.io/proxy-write-timeout: 180
  • 浠庢蹇点閮ㄧ讲鍒颁紭鍖,Kubernetes Ingress 缃戝叧鐨勮惤鍦板疄璺
    绛旓細```yamlapiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: httpbin annotations: nginx.ingress.kubernetes.io/canary: "true" nginx.ingress.kubernetes.io/canary-by-header: "stage" nginx.ingress.kubernetes.io/canary-by-header-value: "gray"```浜嗚В浜嗚繖浜涘叧閿疄璺靛悗锛...
  • K8s鏆撮湶鍐呴儴鏈嶅姟鐨勫绉嶆柟寮
    绛旓細Ingress鐨勫姛鑳介渶瑕佷袱涓儴鍒嗙粍鎴愶紝涓涓槸Nginx鍋氱綉缁滅殑7灞傝矾鐢憋紝涓涓槸Ingress-controller鏉ョ洃鍚琲ngress rule鐨勫彉鍖栧疄鏃舵洿鏂nginx鐨閰嶇疆锛屾墍浠ュ湪k8s鐨勯泦缇ら噷涓轰簡瀹炵幇Ingress閮藉繀椤昏閮ㄧ讲涓涓狪ngress-controller鐨刾od锛屽彲浠ヤ娇鐢ㄥ畼缃戠殑濂楄矾锛氬埌杩欎竴姝ワ紝Ingress鐨勯泦缇ら厤缃凡缁忓仛瀹屼簡锛屾帴涓嬫潵杩涜娴嬭瘯锛岄氳繃Ingress鏆撮湶涓...
  • 扩展阅读:www.sony.com.cn ... 疯狂k8s经典 ... java入门网站 ... r34 ... k8s经典极速电影 ... e人e本k8s ... 美国k8s经典的电影 ... k8s经典剧电影 ... 高清mp4播放器 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网