k8s 部署 Nginx 并代理到tomcat

一、已有信息

root@master nginx\]# kubectl get nodes -o wide

root@master nginx\]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 \ 443/TCP 25h tomcatservice NodePort 10.102.227.68 \ 8080:30010/TCP 128m

这里可以看到,集群中已经有一个tomcat集群,cluster-ip是 10.102.227.68 ,外部访问端口为30010,内部通讯端口为:8080。通过192.168.206.138:30010可以打开tomcat的欢迎界面。

这里要增加一个Nginx服务,并成功代理到tomcat页面中去。

tomcat服务怎么启动,请看:k8s 使用tomcat官方镜像部署集群并解决访问页面404-CSDN博客

二、制作Nginx镜像

1,下载一个官方镜像

复制代码
docker pull nginx
docker tag docker.io/nginx:latest nginx:v1

2,因为要代理到tomcat服务中去,所以默认的nginx.conf必须要更改,如下:

复制代码
cat nginx.conf
############################################
user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    server {
    listen       80;
    server_name  localhost;


    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
                }

    location /tomcat/ {
         proxy_pass   http://10.102.227.68:8080/;
                }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
                }
        }
}

其中:

新增了一个location,代理到tomcat clusterip的8080

location /tomcat/ {

proxy_pass http://10.102.227.68:8080/;

}

3,新建一个Dockerfile,创建属于自己的Nginx镜像:

复制代码
cat Dockerfile
############################################
FROM nginx:v1
RUN rm -rf /etc/nginx/nginx.conf
ADD ./nginx.conf /etc/nginx/

执行创建镜像命令:

复制代码
docker build -t nginx:v3 .

4,将nginx:v3 镜像上传到自有harbor集群:

复制代码
docker tag nginx:v3 192.168.206.137/library/nginx:v3
docker push  192.168.206.137/library/nginx:v3

要注意:在单台服务器上创建的image,使用K8s部署时,其他节点默认是获取不到这个镜像的,会导致发布失败。

5,调试镜像需要注意

在镜像创建完成之后,最好现在docker里面启动一下试试。但是要注意的是,nginx官方镜像在k8s和docker集群中自动会起来。但是上面通过dockerfile创建的镜像,在docker调试时需要docker exec进入后执行:nginx 。

三、创建nginx.yaml,用来部署Nginx服务到集群

vim nginx.yaml

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: mynginx
        image: 192.168.206.137/library/nginx:v3
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginxservice
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080
  selector:
    app: nginx

要注意:

1,image: 192.168.206.137/library/nginx:v3,必须要配置harbor的完整路径,保证集群内的服务器都可以自动下载改镜像。否者会报错找不到image

2,nodePort: 30080,这个nodePort定义的是外部访问端口,取值在30000--32767,不自定义的话,系统会默认分配一个此区间内未使用的端口。如果定义的值不在此区间会报错:

The Service "nginxservice" is invalid: spec.ports[0].nodePort: Invalid value: 80: provided port is not in the valid range. The range of valid ports is 30000-32767

四、使用kubectl 部署nginx.yaml

复制代码
kubectl create -f nginx.yaml

完成之后检查相关信息:

复制代码
kubectl get svc
kubectl get nodes -o wide
kubectl get pods -o wide

如下:

五、访问

通过上图可以看到,nginx默认部署在了master节点 192.168.206.138,使用:

http://192.168.206.138:30080/tomcat/

即可成功访问到tomcat服务的欢迎界面

相关推荐
David爱编程4 分钟前
Service 与 Headless Service 全面对比与实战指南
docker·容器·kubernetes
dessler28 分钟前
Kubernetes(k8s)-集群监控(Prometheus)
linux·运维·kubernetes
PyFans37 分钟前
求助:为什么k8s调度器对PV的节点亲和性检查会失效呢?
kubernetes
DavidSoCool3 小时前
k8s生成StarRocks集群模版
云原生·容器·kubernetes
企鹅侠客3 小时前
简述删除一个Pod流程?
面试·kubernetes·pod·删除pod流程
庸子6 小时前
当JIT遇见K8s
云原生·容器·kubernetes
roman_日积跬步-终至千里9 小时前
【K8s基础】K8s下的Helm和Operator:包管理器与运维程序化
运维·容器·kubernetes
技术liul13 小时前
Docker Compose和 Kubernetes(k8s)区别
docker·容器·kubernetes
MaCa .BaKa14 小时前
35-疫苗预约管理系统(微服务)
spring boot·redis·微服务·云原生·架构·springcloud
竹木一54015 小时前
Docker拉取镜像代理配置实践与经验分享
经验分享·docker·容器