K8S部署tomcat、nginx服务
通过部署一个tomcat 和nginx服务来测试最新版本ingress-nginx1.4.0的代理
本文主要是通过部署一个tomcat 和nginx服务来测试最新版本ingress-nginx1.4.0的代理是否生效。
一、说明
基于nginx服务的ingress controller根据不同的开发公司,又分为k8s社区的ingres-nginx和nginx公司的nginx-ingress。k8s社区提供的ingress,github地址如下:
https://github.com/kubernetes/ingress-nginx。nginx社区提供的ingress,github地址如下:https://github.com/nginxinc/kubernetes-ingress。在此根据github上的活跃度和关注人数,我们选择的是k8s社区的ingres-nginx。
二、ingress-nginx的工作原理
ingress具体的工作原理如下:
- ingress contronler通过与k8s的api进行交互,动态地去感知k8s集群中ingress服务规则的变化,然后读取它,并按照定义的ingress规则,转发到k8s集群中对应的service。
- 而这个ingress规则写明了那个域名对应k8s集群中的哪个service,然后再根据ingress-controller中的nginx配置模板,生成一段对应的nginx配置。
- 然后再把该配置动态地写到ingress-controller的pod里,该ingress-controller的pod里面运行着一个nginx服务,控制器会把生成的nginx配置写入到nginx的配置文件中,然后reload一下,使其配置生效,以此来达到域名分配置及动态更新的效果。
三、部署方法
1、编写deployment,文件名为tomcat-nginx-deploy.yaml,脚本如下:
apiVersion: v1
kind: Namespace
metadata:
name: dev
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: dev
spec:
replicas: 2
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deployment
namespace: dev
spec:
replicas: 2
selector:
matchLabels:
app: tomcat-pod
template:
metadata:
labels:
app: tomcat-pod
spec:
containers:
- name: tomcat
image: tomcat:8.5-jre10-slim
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: dev
spec:
ports:
- port: 80 #对外暴露 80 端口
name: nginx
clusterIP: None
selector:
app: nginx-pod #选择 nginx-pod
---
apiVersion: v1
kind: Service
metadata:
name: tomcat-service
namespace: dev
spec:
ports:
- port: 8080 #对外暴露 8080 端口
name: tomcat
clusterIP: None
selector:
app: tomcat-pod #选择 tomcat-pod
说明:
- Deployment 部署tomcat:8.5-jre10-slim,nginx:1.17.1
- Service 暴露 tomcat pod,nginx pod
- 访问 http://tomcat.test.com 这个域名的 所有请求 / 都转发到 tomcat-service 上
- 访问 http://nginx.test.com 这个域名的 所有请求 / 都转发到 nginx-service 上
2、编写ingress,文件名为
tomcat--nginx-ingress.yaml,脚本如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-http
namespace: dev
spec:
ingressClassName: nginx #需要指定 哪个 IngressClass
rules:
- host: nginx.test.com #所有的 nginx.test.com请求都转发到 Service nginx-service
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
- host: tomcat.test.com #所有的 tomcat.test.com请求都转发到 Service tomcat-service
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: tomcat-service
port:
number: 8080
3、部署deployment、ingress,命令如下:
kubectl apply -f tomcat-nginx-deploy.yaml
kubectl apply -f tomcat-nginx-ingress.yaml
截图如下:
4、查看部署情况
可以看到刚才部署的deployment,pod,svc等资源已经开始running.命令如下:
kubectl get all -n dev
查看tomcat,nginx的pod日志,命令如下:
kubectl logs -f --tail=200 tomcat-deployment-7db86c59b7- jt416 -n dev
kubectl logs -f --tail=200 nginx-deployment-5ffc5bf56c-4rxvn -n dev
5、测试部署是否成功
由于我们的ingress资源配置的域名是http://tomcat.test.com,http://nginx.test.com,所以我们需要把它添加到宿主机的hosts 文件中,如下:
按照预期:当我们访问http://tomcat.test.com的时候其实就是访问192.168.10.7上的 ingress-nginx-controller 这个nginx,那么根据 ingress 的 资源的设定它会把请求 转发到tomcat-service 上,从而访问到 tomcat 界面;
当我们访问 http://nginx.test.com的时候其实就是访问 192.168.10.7上的 ingress-nginx-controller 这个nginx,那么根据 ingress 的 资源的设定它会把请求 转发到nginx-service 上,从而访问到 nginx界面。
更多推荐
所有评论(0)