项目使用k8s进行容器编排,通过rancher对k8s进行页面化管理,最后通过nginx和ldap实现rancher的统一访问和接口代理。
实现目标:
1、通过docker-compose安装rancher
2、通过rancher管理k8s集群
3、通过nginx应rancher进行反向代理
4、通过ldap对接rancher实现统一账户认证
实现过程:
1、通过docker-compose安装rancher
1.1、编列docker-compose文件docker-compose.yaml
version: '3'
services:
rancher:
image: 'rancher/rancher:v2.6.3' #镜像文件
privileged: true #容器以root用户运行
restart: always #容器重启策略:总是自动重启
container_name: rancher #容器名称
volumes: #磁盘挂载,本地:容器内
- ./data:/var/lib/rancher
- /etc/resolved.conf:/etc/resolved.conf
ports:
- 10080:80 #端口映射,本地:容器内
- 10443:443
environment: #时区
- TZ=Asia/Shanghai
1.2、以docker-compose启动容器
#构建容器,构建后自动启动
docker-compose up -d
#清理,容器将被删除
docker-compose down
#停止,容器会被停止,不会被删除
docker-compose stop
#启动
docker-compose start
2、通过rancher管理k8s集群
2.1、登录rancher页面
2.2、按照提示在服务器中执行命令,获取初始密码,登录后修改密码
#查看初始密码
docker logs rancher 2>&1 | grep "Bootstrap Password:"
#密码忘记时,可通过如下命令初始化密码
docker exec -it rancher reset-password
2.3、选择集群管理-导入已有集群,导入集群
2.4、选择K8S集群
2.5、输入集群信息后点击创建
2.6、复制如下信息到k8s管理节点执行
2.7、等待集群创建完成
3、通过nginx应rancher进行反向代理
3.1、安装nginx
#yum安装nginx
yum -y install nginx
3.2、添加证书
#创建证书路径并进入
mkdir -p /etc/nginx/cert.d && cd /etc/nginx/cert.d
#申请自己的证书(有证书测跳过),
openssl req -new -x509 -nodes -days 3650 -out server.crt -keyout server.key
#填写相关信息
3.3、修改nginx配置,进行代理
#修改配置文件
vim /etc/nginx/nginx.conf
#配置文件内容如下
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
listen [::]:80;
server_name rancher.test.local;
location / {
proxy_pass http://192.168.16.120:10080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name rancher.test.local;
ssl_certificate /etc/nginx/cert.d/server.crt;
ssl_certificate_key /etc/nginx/cert.d/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
proxy_pass https://192.168.16.120:10443;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
}
}