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

news/2024/5/9 10:12:51/文章来源:https://blog.csdn.net/weixin_33774308/article/details/85176743

今年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_827849.aspx

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

相关文章

网站后台添加富文本编辑器

网站后台需要添加富文本编辑器,偶然的机会发现了百度的UEditor,经过一番配置(我使用的环境是struts2hibernatespring),终于是成功了,下面来记录一下配置的过程: step1:首先去UEditor官网下载UE…

设置网站端口,防火墙

1.查看本地服务配置是否正常 2.查看系统版本 cat /etc/redhat-release 3.查看防火墙 firewall-cmd --list-all 4.查看连接(在本地) 4.设置端口号 cat /etc/selinux/config|grep SELINUX firewall-cmd --zonepublic --add-port80/tcp --permanent firewall-cmd --reload

通过Web安全工具Burp suite找出网站中的XSS漏洞实战(二)

一、背景 笔者6月份在慕课网录制视频教程XSS跨站漏洞 加强Web安全,里面需要讲到很多实战案例,在漏洞挖掘案例中分为了手工挖掘、工具挖掘、代码审计三部分内容,手工挖掘篇参考地址为快速找出网站中可能存在的XSS漏洞实践(一)https://segmentfault.com/a/11900000160…

精选:3个可以下载免费的高质量照片的网站

在您的照片库中加入成千上万张高品质的照片,涵盖各种主题和风格!下面列出的网站提供可用于任何项目的图像,没有限制。您不必担心因为一张小图片的版权而导致麻烦。通过这些网站可以改善你的设计项目,这些是网上提供免费的高质量图…

如何编写一个简单的企业门户网站(静态)

1.环境要求: 开发工具及版本:Sublime3开发使用的技术:CSSHTMLJS 2.准备工作: 创建必须的文件和文件夹打开Sublime在index页面引用js和css 3.详细设计(代码后面给出) 3.1页眉设计 实现思路&#xff1a…

政府与金融行业网站为何必须安装SSL证书?

在了解SSL证书对于政府与金融行业网站的重要性之前,我们先来了解一下SSL证书是什么?根据百度百科上的解释,SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书…

用HTML+CSS编写一个计科院网站首页的静态网页

一.HTML代码 1 <!DOCTYPE html>2 <html>3 <head>4 <meta charset"UTF-8">5 <title>首页</title>6 7 </head>8 <body>9 <div id"page">10 <div id"page_head">11 &…

加强网站安全、重构公司的门户网站项目(C# VS2003)

为什么80%的码农都做不了架构师&#xff1f;>>> 请大家不要非觉得在炫耀什么的心态来看文章&#xff0c;那就扭曲了本文章的出发点&#xff0c;就算我骄傲了一下&#xff0c;又能怎么样&#xff0c;若人人像我这样骄傲一下&#xff0c;我们的软件开发水平说不定几年…

一步步构建大型网站架构

2019独角兽企业重金招聘Python工程师标准>>> 之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;亿万用户网站MySpace的成功秘密、Flickr架构、YouTube网站架构、PlentyOfFish 网站架构学习、WikiPedia技术架构学习笔记。这几个都很典型&#xff0c;我们可以…

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

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

python+beautifulsoup+smtp爬取学院网站的信息公告+邮件发送

最近学习了利用python爬虫&#xff0c;甚是有趣。所以写了个试用的小程序分享出来。 学院的相关通知都会放在网站的信息公告上&#xff0c;但每天打开电脑->打开浏览器->打开学院网站&#xff0c;就为了看个信息公告&#xff0c;挺麻烦还容易忘记。但害怕错过重要通知&a…

python 爬网站上的图片

最近在做bot的动物识别&#xff0c;最后根据大会给出来的测试数据&#xff0c;发现对简笔画的动物识别处于懵圈状态&#xff0c;识别效果很差~故我需要自己爬取一些简笔画的图片~ 手写学习了某一网站的图片爬取&#xff1a; 附上代码&#xff1a; # -*- coding: utf-8 -*-…

ubuntu安装网站服务器,Ubuntu安装服务器

tomcat 的安装安装 Tomcat 需要首先安装配置 JDKJava 的安装在 Ubuntu 和 Linux Mint 上安装 Oracle JDK使用下面的命令安装&#xff0c;只需一些时间&#xff0c;它就会下载许多的文件&#xff0c;所及你要确保你的网络环境良好&#xff1a;sudo add-apt-repository ppa:webup…

织梦tag.php删,DedeCMS的TAG标签SEO问题改进及PHP源代码讲解

DEDECMS是最优秀的中文开源CMS系统之一了&#xff0c;不过&#xff0c;DEDE系统也不是尽善尽美的&#xff0c;存在许多待改善的地方&#xff0c;且不说它那基本广受诟病的安全问题&#xff0c;今天跟版网就找其中一个细节说说它的问题&#xff0c;那就是它的tag标签问题。DEDEC…

怎么把整个段落往左移_单页网站怎么做SEO优化与推广

单页网站SEO是一个相对特别的优化工作&#xff0c;它更多的应用于在线商品快速交易行业&#xff0c;单页网站其实往往更多的应用在SEM竞价推广&#xff0c;而不是SEO。SEO单页排名技术&#xff1a;指的是依赖于一个单独的页面&#xff0c;对目标关键词进行优化&#xff0c;通常…

怎么嵌入到网站的html源代码中_怎么用好结构化数据标记,手把手教你做schema markup code...

什么是结构化数据&#xff08;schema markup&#xff09;&#xff1f;Schema Markup&#xff08; https://schema.org/&#xff09;是一种代码形式用来帮助你的网页和搜索引擎进行友好的沟通&#xff0c;告诉搜索引擎更多关于你的信息&#xff0c;比如说有时候我们看到搜索结果…

seo管理php源码_网站建设之常用CMS系统的SEO优化功能分析

大家好&#xff01;我是小熊优化的SEOER&#xff0c;在seo优化这个行业已经从业7年多了&#xff0c;优化过不少的个人和企业网站&#xff0c;根据多年的经验也总结出了不少的优化经验&#xff0c;现在大部分的网站&#xff0c;尤其是单位性质的网站基本都是采用CMS系统来做的&a…

推荐一个学习基础编程技术的网站

推荐一个学习基础编程技术的网站 RUNOOB-菜鸟教程 该网站简介&#xff1a; ----------------------------------------------------------------------------------------------------------------------------------------------------- 关于我们 菜鸟教程提供了最全的基础…

如何免费领取 Pluralsight 等各大学习网站会员?

步骤 首先你需要一个微软账号&#xff0c;如果你没有的话可以去注册一个&#xff0c;点击 注册 。 点击网址 微软 Visual Studio 福利 并登陆你微软账号&#xff0c;这时你会看到下面有很多激活码可以领取。 激活 点击Activate&#xff0c;根据操作步骤,在Pluralsight页面输入…

请检查网站服务器是否正常.,请检查服务器地址是否正确

请检查服务器地址是否正确 内容精选换一换网站的访问与云服务器的网络配置、端口通信、防火墙配置、安全组配置等多个环节相关联。任意一个环节出现问题&#xff0c;都会导致网站无法访问。本节操作介绍网站无法访问时的排查思路。网站无法访问怎么办&#xff1f;如果打开网站有…