K8S集群使用Ingress实现网站入口动静分离实践

news/2024/5/20 2:48:05/文章来源:https://blog.csdn.net/weixin_33895695/article/details/85133570

今年3月份在公司的内部k8s培训会上,和研发同事详细探讨了应用部署容器化部署的几个问题,问题简要如下:

1、java应用容器化部署
首先通过自动化部署工具编译出全量的war包,将war包直接编译到docker镜像后推送到私用仓库并版本化控制;其次通过更新deployment的yaml文件来实现部署和后续的滚动更新,应用程序需要进行容器化改造。

这里的难点和工作量在于容器的镜像制作以及版本化管理,之后准备采用harbor做企业私有仓库。

2、dashborad面板的权限控制
解决方案参考:http://blog.51cto.com/ylw6006/2113542

3、应用程序日志的如何收集
解决方案参考:http://blog.51cto.com/ylw6006/2107307

4、网站动静分离
首先所有的动态应用通过部署tomcat pod的方式来响应,静态的资源统一部署一个nginx pod方式来响应;
其次,动静分离的规则配置交给traefik ingress实现;
最后,静态资源的文件统一存放在pv上,更新静态资源不需要去编译docker镜像.

一、动静分离举例说明

以内网测试环境2的虚拟主机站点配置(底层服务)为例:
域名test2.oprman.com(PS:研发大爷喜欢自己YY域名)的静态资源配置如下
1、/ ——> 对应/usr/local/6.0_files/oprman_test2目录
2、/mfs ——> 对应/mnt/mfs目录(这个实际上是一个分布式文件系统的挂载点)

域名test2.oprman.com的动态资源配置如下
1、/web ——> 后端tomcat进行响应
2、/api ——> 后端tomcat进行响应

K8S集群使用Ingress实现网站入口动静分离实践
后端的tomcat配置信息
K8S集群使用Ingress实现网站入口动静分离实践

以内网测试环境2的虚拟主机站点配置(平台服务)为例:
域名resourcesharing.test2.59iedu.com的静态资源配置如下
1、/ ——> 对应/data/static_files/test2/zygxpt/portal目录
2、/mfs ——> 对应/mnt/mfs目录(这个实际上是一个分布式文件系统的挂载点)
3、/admin ——> 对应/data/static_files/test2/zygxpt/admin目录
4、/login ——> 对应/data/static_files/test2/zygxpt/login目录
5、/play ——> 对应/data/static_files/test2/zygxpt/play目录

域名test2.oprman.com的动态资源配置如下
1、/web ——> 后端tomcat进行响应

K8S集群使用Ingress实现网站入口动静分离实践
K8S集群使用Ingress实现网站入口动静分离实践
后端的tomcat配置信息
K8S集群使用Ingress实现网站入口动静分离实践

这里补充说明一下,内网存在三套环境
1、开发环境: 主要用于开发人员开发、调试
2、测试环境1:用于测试人员验证
3、测试环境2:用于开发人员自测与验证

从网站的类型上可以分为底层服务和平台服务两种类型,大部分的底层服务是通过dobbo进行内部调用的,容器化之后只要POD之间的网络可以互联互通即可相互调用,少部分底层服务需要对外暴露http端口。平台服务都需要对外暴露http端口。

动静分离的nginx规则也主要是上述两类,其中以平台服务的数量居多,底层服务有动静分离规则的较少。

二、部署traefik 入口

traefik具体的部署方法可参考前文,前文传送门:http://blog.51cto.com/ylw6006/2073718

# kubectl get svc,pod,ingress -n kube-system

K8S集群使用Ingress实现网站入口动静分离实践
K8S集群使用Ingress实现网站入口动静分离实践
K8S集群使用Ingress实现网站入口动静分离实践

三、创建处理动态的应用

1、build动态部分的镜像并推送至私有仓库

# cat dockerfile                   
FROM registry.59iedu.com/tomcat_base:v1.0
MAINTAINER yangliangwei "ylw@fjhb.cn"
COPY ROOT-20180509.tgz /home/
RUN tar zxf /home/ROOT-20180509.tgz -C /home/tomcat/webapps/ && rm -rf /home/ROOT-20180509.tgz
# docker build -t oprman-test2:v1 .

K8S集群使用Ingress实现网站入口动静分离实践

# docker tag oprman-test2:v1 registry.59iedu.com/oprman-test2:v1
# docker push registry.59iedu.com/oprman-test2:v1

K8S集群使用Ingress实现网站入口动静分离实践
2、通过yaml文件创建动态应用

# cat configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:name: filebeat-oprman-test2-config
data:filebeat.yml: |filebeat.prospectors:- input_type: logpaths:- "/log/*"output.elasticsearch:hosts: ["192.168.1.19:9600"]index: "filebeat-oprman-test2"# kubectl create -f configmap.yaml 
# cat oprman-test2-tomcat-dp.yaml   
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: oprman-test2-tomcatnamespace: default
spec:replicas: 1template:metadata:labels:name: oprman-test2-tomcatspec:containers:- image: registry.59iedu.com/filebeat:v5.4.0imagePullPolicy: Alwaysname: filebeatvolumeMounts:- name: app-logsmountPath: /log- name: filebeat-oprman-test2-configmountPath: /etc/filebeat/- image: registry.59iedu.com/oprman-test2:v1name : oprman-test2-tomcat imagePullPolicy: Alwaysenv:- name: JAVA_OPTSvalue: "-Xmx2048m -Xms512m"ports:- containerPort: 8080volumeMounts:- name: app-logsmountPath: /home/tomcat/logsvolumes:- name: app-logsemptyDir: {}- name: filebeat-oprman-test2-configconfigMap:name: filebeat-oprman-test2-config# kubectl create -f  oprman-test2-tomcat-dp.yaml  
# cat oprman-test2-tomcat-svc.yaml 
apiVersion: v1
kind: Service
metadata:name: oprman-test2-tomcatlabels:name: oprman-test2-tomcat
spec:ports:- port: 8080protocol: TCPtargetPort: 8080name: httpselector:
name: oprman-test2-tomcat# kubectl create -f oprman-test2-tomcat-svc.yaml 

K8S集群使用Ingress实现网站入口动静分离实践
演示仅部署底层服务的后端tomcat处理动态请求,平台的后端tomcat部署办法一样,出于文章篇幅考虑就不再赘述。

四、创建处理静态部分的应用

1、我们采用configmap的方式来处理静态部分的请求路由,动态部分的请求路由将交给
Ingress来实现。nginx配置文件针对平台部分的配置因为路径都一样,所以域名采用$host进行通配,底层的需要单独配置。(好在底层服务需要暴露http的并不多)

# cat nginx.conf 
user nginx;
worker_processes auto;
error_log /usr/share/nginx/html/nginx-error.log;
pid /run/nginx.pid;# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;events {worker_connections 102400;use epoll;
}http {log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';server_tokens     off;access_log        /usr/share/nginx/html/nginx-default-access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 2048;include             /etc/nginx/mime.types;default_type        application/octet-stream;include /etc/nginx/conf.d/*.conf;include /etc/nginx/conf/extra/*.conf;server {listen       80 default_server;index  index.html index.htm;access_log /usr/share/nginx/html/logs/test2-static-access.log main;location / {root /usr/share/nginx/html/$host/portal;index  index.html index.htm;}location /admin{root /usr/share/nginx/html/$host;index  index.html index.htm;}location /login {root /usr/share/nginx/html/$host;index  index.html index.htm;}location /play {root /usr/share/nginx/html/$host;index  index.html index.htm;}location /mfs {root /mnt/mfs;}}server {listen       80;server_name  test2.oprman.com;index  index.html index.htm;access_log /usr/share/nginx/html/logs/test2-static-access.log main;location / {root /usr/share/nginx/html/test2.oprman.com;index  index.html index.htm;}location /mfs {root /mnt/mfs;}}
}# kubectl create configmap test2-static-etc --from-file nginx.conf 

2、创建pv、pvc

# cat test2-static-data-pv-pvc.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:name: test2-static-data
spec:capacity:storage: 100Gi accessModes:- ReadWriteMany nfs: path: /home/test2-static-dataserver: 192.168.115.5persistentVolumeReclaimPolicy: Recycle 
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: test2-static-data
spec:accessModes:- ReadWriteManyresources:requests:storage: 100Gi# kubectl create -f test2-static-data-pv-pvc.yaml 

3、准备静态资源
K8S集群使用Ingress实现网站入口动静分离实践
4、创建deployment

# cat test2-static-deployment.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: test2-static
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: test2-staticlabels:name: test2-static
spec:replicas: 2template:metadata:labels:name: test2-staticspec:containers:- name: test2-staticimage: registry.59iedu.com/nginx:latestvolumeMounts:- mountPath: /usr/share/nginx/htmlname: test2-static-data- mountPath: /etc/nginx/nginx.confsubPath: nginx.confname: test2-static-etcports:- containerPort: 80volumes:- name: test2-static-datapersistentVolumeClaim:claimName: test2-static-data- name: test2-static-etcconfigMap:name: test2-static-etcitems:- key: nginx.confpath: nginx.conf # kubectl create -f test2-static-deployment.yaml

五、创建统一入口ingress

# cat test2-ingress.yaml 
apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: traefik-oprman-test2namespace: defaultannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- host: resourcesharing.test2.59iedu.comhttp:paths:- path: /backend:serviceName: test2-staticservicePort: 80- host: test2.oprman.comhttp:paths:- path: /backend:serviceName: test2-staticservicePort: 80- path: /webbackend:serviceName: oprman-test2-tomcatservicePort: 8080- path: /apibackend:serviceName: oprman-test2-tomcatservicePort: 8080# kubectl create -f test2-ingress.yaml

K8S集群使用Ingress实现网站入口动静分离实践

六、访问测试

1、修改host解析
K8S集群使用Ingress实现网站入口动静分离实践
2、底层服务后端tomcat访问测试
K8S集群使用Ingress实现网站入口动静分离实践
3、平台前端访问测试
K8S集群使用Ingress实现网站入口动静分离实践
4、平台后台入口访问测试(前面的nginx配置/admin部分,实际未静态的内容,输入用户名和密码之后才开始请求到后端的tomcat)
K8S集群使用Ingress实现网站入口动静分离实践

这里要重点说明一下,把分布式文件系统挂载到nginx主机上并发布出去给用户访问,实际上是非常不可取的一种方式,当nginx和mfs master主机之间的网络连接出现问题的时候,会导致nginx请求被堵塞,80、443等端口连接不顺畅,极度影响用户体验,这个后续需要合力改进!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_823723.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站多次切换服务器ip,站群多ip服务器怎么切换ip?

租多ip服务器的主要目的是,有时候用服务器采集别处的内容被封了IP,我们就经常碰到。这时候我们就要换服务器主IP才可以继续采集,下面跟大家讲下多ip服务器怎么切换ip的方法,这个方法只对多IP的服务器有效,只有一个IP的…

wordpress windows安装_本地搭建WordPress外贸网站教程

如果你还是个小白,想学习外贸建站技术,无奈还不懂域名和服务器知识,那么在本地搭建WordPress网站是再好不过的选择了,不需要任何经济上的成本,是学习建站的很好的选择,那么怎么在本地搭建WordPress网站呢&a…

sqlserver项目案例c语言,浅谈《基于PHP的动态网站开发》课程的项目案例设计原稿(图文高清版)...

浅谈《基于PHP的动态网站开发》课程的项目案例设计(原稿)1、语言MySQL数据库技术及PHP操作MySQL数据库后端网站编程技术等内容。以案例为主线,学习掌握和运用所涉及的知识点,根据知识点的常用性和关键性端课程的学生教学背景基于PHP的动态网站开发课程,教学课时学时。前导课程网…

浅谈|营销型网站建设的优势特征

营销型网站建设主要特征是以展示宣传企业的品牌及产品为主,网站通过对企业信息的进行系统宣传,让有需求的浏览者熟悉企业的所提供的产品及服务,并通过有效的在线交流沟通方式搭建起潜在客户与企业之间的桥梁。 通过营销型网站宣传自已的产品及…

linux运维面板_宝塔Linux面板一键迁移功能实现网站快速搬家教程

宝塔面板对于广大不精通linux运维的站长来说绝对是一大神器,无论是系统运维还是网站搭建都非常的易于上手。而且面板还有一个“一键迁移”的功能,之前一直都是内测功能,近期随着宝塔版本更新正式上线了。刚好飞鸟这边有个网站需要搬家&#x…

bootstrap网站后台从设计到开发

前言 毕业后在一家小公司找的工作是做前端,小公司必须要身兼多职,会多门技术,所以为了工作需要自学ps,做过微信运营,后来为了做erp管理系统,又开始学习c# ,之后公司有新项目要用wpf ,我又开始学习wpf。感觉自己工作这三年虽然学了…

找到一个在线网站截图的网站

因为业务的关系,需要定期查看一些网站和微博,之前只能每天定期访问这些网站,非常的麻烦,还经常忘记,也用过一些截屏工具,也不是很方便,还是要手动的操作。后来找到一个非常好用的网站 http://ww…

linux 嵌入式汇编,常用ARM汇编指令 - 嵌入式Linux教程_Linux教程_Linux公社-Linux系统门户网站...

在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初始化,进出中断时的环境保护,恢复等对性能有要求的地方。ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理…

大型网站技术架构(四)网站的高性能架构

2019独角兽企业重金招聘Python工程师标准>>> 网站性能是客观的指标,可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间,指从发出请求到最后收到响应数据所需要的时…

SQL实战 9.高频SQL面试题 网站访客最近登录日期系列

最近登录日期(一) 描述 某网站每天有很多人登录,请你统计一下该网站每个用户最近登录是哪一天,用的是什么设备.有一个登录(login)记录表,简况如下:第1行表示user_id为2的用户在2020-10-12使用了客户端id为1的设备登录了该网站。。。第4行表示…

非英文网站如何使用MySQL的字符集

使用 MySQL字符集 对于非英文网站,当他们使用非英语语言从数据库中写入或读取数据时,常常必须解决字符集的问题。字符集指导数据库哪种字符编码方案用于数据的写入读取,这样可以简单地理解为字符集的一个子集整理,它告诉数据库如何存储数据。…

【杂记】一个不错的国外论文没费下载网站

Researchgate https://www.researchgate.net 搜索页面https://www.researchgate.net/search?q 比如搜索"virtual trackball" 下面这篇是我想要的 总结 还是非常好的一个网站,IT技术类的论文非常多!

【C++】已编译好的OpenSSL Windows版分享网站

http://slproweb.com/products/Win32OpenSSL.html (文章末尾附下载列表) 说明: 例如:Win32 OpenSSL v1.1.1c -- 02.Win32OpenSSL-1_1_1c.exe安装后目录如下 基于此安装可以进行OpenSSL的二次开发,bin/lib/include开…

网络爬虫重庆交通大学新闻网站中所有的信息通知

目录一、创建anaconda虚拟环境二、爬虫怕爬取信息(1)爬取南阳理工学院ACM练习题目数据(例子)(2)爬取重庆交通大学新闻网站中所有的信息通知三、总结四、参考链接一、创建anaconda虚拟环境 1.打开Anaconda …

使用fiddler 去分析视频网站

目录一、VLC下载二、fiddler 去分析bilibili三、参考链接一、VLC下载 官网下载地址: https://www.videolan.org/vlc/ 一些公开的视频网址: 动画片 rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov 景点摄像头 https://hd-auth.s…

9个提高SEO文章的排名的写作方法和例子

爱发猫认为在开始编写文本之前,请做好充分的准备。 良好的准备对于顺利写出更高质量的文章至关重要。 有两点需要考虑。 准备写作 成为人物 考虑搜索意图 将构图视为一个角色 爱发猫认为写作时,你是否有一个先入为主的观念,即必须在固定…

如何通过6个简单步骤让百度收录你的网站

我们都依靠百度强大的搜索引擎来帮助我们度过我们的生活。从了解最新趋势到获得解决问题的建议,我们很难想象没有它我们会在哪里。很容易将此平台视为我们用来搜索有关其他人、地点或事件的信息的平台。然而,作为小企业主,您还需要积极思考人…

SEO关键词措施的20种方法

自社交媒体兴起以来,SEO关键词营销的有效性常常被忽视。 但是,从 SEO 收集的访问是一个具有高度使命感的人,因此与通过社交访问相比,会产生更高的转化率。 因此,通过不仅关注社交媒体措施而且关注搜索引擎措施&#…

爱发猫自动建站程序,自动发布,自动推送,自动收录

只要指定一组长尾词,自动建站系统会围绕这组长尾词继续挖掘长尾词并生成标题和内容。 包括内链系统,百度推送,自动图片。 爱发猫自助建站系统介绍https://www.zgybz.com/?id12 购买后客户会培训如何使用。下图是文章生成效果,带…