一、项目概述

k8s工作负载由于容灾自启,业务ip地址会经常在工作节点之间进行漂移,故而需要在k8s外面做Nginx进行负载均衡,这里采用https方式,项目使用Vue打包制作的镜像

二、环境

服务器

IP地址

备注

K8sMaster

192.168.2.138

kuboard管理平台,Master管理节点 k8s1.28

K8sWorker01

192.168.2.139

Worker工作节点 k8s1.28

K8sWorker02

192.168.2.140

Worker工作节点 k8s1.28

Harbor

192.168.2.142

Harbor镜像仓库 + Nginx

三、部署流程

3.1 Vue项目镜像打包

3.1.1 Dockerfile

在这里插入图片描述 直接将dist文件放在nginx的html下面

#Dockerfile
FROM nginx:latest
COPY dist /usr/share/nginx/html
#打包todolist:v1.0.0
docker build -t todolist:v1.0.0 .
#保存镜像  
docker save todolist:v1.0.0>todolist.tar

3.2 Kuboard新建vue项目工作负载

3.2.1 推送到Harbor镜像仓库

详情查看前篇博客:k8s:V1.28拉取Habor镜像 这里使用时k8s:v1.28版本,从1.24版本往上使用containerd,需要使用ctr与nerdctl命令来进行查看镜像,命名空间,进行推送等,k8sV1.24以上版本拉取本地镜像是从containerd镜像库里面拉取的,不是从docker images里面拉取的,如果你没有Harbor,要确保每个工作节点上面k8s.io命名空间有镜像都有镜像,==如果你的k8s版本不是1.24版本以上,请自行使用docker上传到镜像仓库== ;常用ctr命令:

#下载镜像nginx
ctr image pull docker.io/library/nginx:alpine
#查看命名空间
ctr ns ls
#查看default空间镜像
ctr image ls
#查看k8s.io空间镜像
ctr -n k8s.io image ls
#打标签
ctr -n k8s.io images tag docker.io/library/flaskweb:v1.0.0 192.168.2.142:8800/test/flaskweb:v1.0.0
#导入到k8s.io空间镜像
ctr -n k8s.io image import flaskweb.tar.gz
#从镜像仓库下载镜像,http需要如下写法,不然会报错
ctr images pull --plain-http=true --skip-verify  --user admin:Harbor12345 192.168.2.142:8800/test/flaskweb:v1.0.0
#推送镜像
ctr -n k8s.io image push --plain-http=true --skip-verify  --user admin:Harbor12345 192.168.2.142:8800/test/flaskweb:v1.0.0
#nerdctl命令与docker命令很像
nerdctl images
nerdctl run
加载镜像到containerd

打标签tag

推送到Habror

#加载镜像
ctr -n k8s.io image import todolist.tar
#打标签tag
ctr -n k8s.io images tag docker.io/library/todolist:v1.0.0 192.168.2.142:8800/test/todolist:v1.0.0
#推送镜像
ctr -n k8s.io image push --plain-http=true --skip-verify  --user admin:Harbor12345 192.168.2.142:8800/test/todolist:v1.0.0
​

在这里插入图片描述

在这里插入图片描述

3.2.2 部署deployment工作负载

在这里插入图片描述在这里插入图片描述

3.3 openssl安装更新

#下载openssl
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1q.tar.gz
#解压openssl
tar -xzvf openssl-1.1.1q.tar.gz
cd openssl-1.1.1q
#编译
./config
make && make install

如果openssl version报错,可能是软连接出现问题 在这里插入图片描述在这里插入图片描述

3.4 服务器证书生成

按照要求填写信息,密码自定义,域名自定义,修改hosts文件

openssl genrsa -des3 -out todolist.key 2048
​
openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout todolist.key -out todolist.crt

在这里插入图片描述

3.5 nginx.conf配置文件编写,启动项目

worker_processes 4;
worker_rlimit_nofile 40000;
​
events {
    accept_mutex on;
    multi_accept on;
    worker_connections 8192;
}
http {
    include       /etc/nginx/mime.types;
    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;
    #tcp_nopush     on;
​
    keepalive_timeout  65;
​
    #gzip  on;
​
    upstream todolist {
        least_conn;
        server 192.168.2.139:32666 max_fails=3 fail_timeout=5s;
        server 192.168.2.140:32666 max_fails=3 fail_timeout=5s;
​
    }
    server {
        listen 443 ssl;
        ssl_certificate /etc/nginx/cert/todolist.crt;
        ssl_certificate_key /etc/nginx/cert/todolist.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on; 
  
        location  / {
            proxy_set_header HOST $host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass  http://todolist;
​
        }
    }
    #重定向到https
    server {
        listen       80;
        server_name  localhost;
        return 301 https://$host:8443$request_uri;
    }
}
​

启动项目,挂载nginx日志文件,配置文件,cert证书文件

docker run -itd -e TZ="Asia/Shanghai" --restart=always -p 8888:80 -p 8443:443 -v /opt/todoList/nginxlist.conf:/etc/nginx/nginx.conf -v /opt/todoList/ssl:/etc/nginx/cert -v /opt/todoList/logs:/var/log/nginx --name nginxlist nginx:latest

域名访问

ip地址访问在这里插入图片描述