通过Nginx反向代理Rancher以及使用内网部署k8s集群的方法【20220520】

发表于 2022-05-12
阅读 93

介绍

介绍

Rancher要求所有节点服务器和Rancher管理服务器之间的网络是完全通畅的,而且Rancher还要自己霸占80和443端口,如果按照Rancher的要求把Rancher管理服务器的网络完全放开似乎的最简单的办法!可是,一个管理服务器集群的总司令部完全暴露出来,这实在是有点恐怖~~

为此,福哥想到了将Rancher集群部署在内部网络里面,内部网络各个服务器之间完全不做限制,对外只要把管理服务器的80和443端口开放给我们的运维管理员就可以了,这样的话既保证了服务器集群的安全又满足了Rancher对服务器的要求,完美地解决了这个问题~~

安装

VMware

通畅情况下服务器都会有至少两个网口,一个公网,一个内网。福哥用的是VMware虚拟机,为了模拟服务器的双网口福哥给每个虚拟机单独增加了一个仅主机的网络(这个仅主机的网络和真实服务器的内网网络基本是一样的)。

Rancher管理服务器

公网IP:192.168.168.116

内网IP:192.168.189.116

home/topic/2022/0607/20/5e038dfb7643e956b528bc32ed07be5e.png

home/topic/2022/0513/17/e4effb4a79cbe824194e6a21b14b868f.png

Rancher节点

公网IP:192.168.168.201

内网IP:192.168.189.201

home/topic/2022/0607/20/cec8c6341df1516230c22cf8b7257337.png

home/topic/2022/0513/17/998090e3a0148edebed09895ba8baf2f.png

安装

Registry

通常情况下k8s环境都是需要一个自建的registry镜像仓库的,这样可以在集群内部的各个节点里面同步镜像。

福哥的这个环境自然也不会少了。之前福哥有整理一套registry自建镜像仓库的教程大家可以照着去部署,在这里福哥就不一一详述了。

需要注意一点,仓库的5000端口只对内网IP开放,这样更加安全。

docker run -tid \
--name registry \
-h registry \
--memory 512m \
--memory-swap -1 \
--restart unless-stopped \
--net bridge2 \
-p 192.168.189.116:5000:5000 \
-v /data/docker.registry/etc/cert.d:/etc/cert.d \
-v /data/docker.registry/var/lib/registry:/var/lib/registry \
-v /data/docker.registry/etc/registry/auth:/etc/registry/auth \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/etc/cert.d/registry.crt \
-e REGISTRY_HTTP_TLS_KEY=/etc/cert.d/registry.key \
-e REGISTRY_AUTH=htpasswd \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/etc/registry/auth/passwd \
docker.io/registry

如果你的环境和福哥的一样是将registry私有仓库部署在一个独立的内网主机上面的话,可以使用下面的简化的启动容器的命令。

docker run -tid \
--name registry \
-h registry \
--restart unless-stopped \
-p 5000:5000 \
-v /data/docker.registry/etc/cert.d:/etc/cert.d \
-v /data/docker.registry/var/lib/registry:/var/lib/registry \
-v /data/docker.registry/etc/registry/auth:/etc/registry/auth \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/etc/cert.d/registry.crt \
-e REGISTRY_HTTP_TLS_KEY=/etc/cert.d/registry.key \
-e REGISTRY_AUTH=htpasswd \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/etc/registry/auth/passwd \
docker.io/registry

Rancher

安装Rancher的时候要把Rancher的80和443端口绑定到服务器的内网IP上面,这样才能保证所有内网网段IP的主机都可以添加到Rancher里面作为集群节点使用。

docker run -tid \
--name rancher-rancher \
-h rancher-rancher \
--memory 4g \
--memory-swap -1 \
--restart unless-stopped \
--net bridge2 \
-p 192.168.189.116:80:80 \
-p 192.168.189.116:443:443 \
--privileged \
rancher/rancher:v2.5.9

Nginx

安装Nginx的时候把80和443端口绑定到服务器的公网IP上面,这样我们才能通过浏览器操作Rancher平台。

docker run -tid \
--name nginx \
-h nginx \
--memory 512m \
--memory-swap -1 \
--restart unless-stopped \
--net bridge2 \
-p 192.168.168.116:80:80 \
-p 192.168.168.116:443:443 \
nginx:1.20

建立自定义default.conf配置文件,写下如下配置信息:

server {
    listen       80;
    server_name  localhost;

    rewrite ^/(.*)$ https://$host/$1;
}


server {
    listen       443 ssl;
    server_name  localhost;
    ssl_certificate     rancher.tongfu.net.crt;
    ssl_certificate_key rancher.tongfu.net.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_pass   https://rancher-rancher;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
        add_header 'Access-Control-Allow-Credentials' 'true';
        if ( $request_method = 'OPTIONS' ) {
            return 200;
        }
    }
}

覆盖default.conf配置文件。

docker cp default.conf nginx:/etc/nginx/conf.d/default.conf

home/topic/2022/0519/11/39ecd7e0e6d4ae4dbbd2208582a8388f.png

复制rancher.tongfu.net证书。

docker cp rancher.tongfu.net.crt nginx:/etc/nginx/
docker cp rancher.tongfu.net.key nginx:/etc/nginx/

home/topic/2022/0519/11/0ed5a492dcfdfa24d593e3372ff5a03b.png

重启nginx服务。

docker restart nginx

配置

Rancher Server URL

设置server URL的时候一定要设置为内网IP,因为内网的网络权限是完全放开的。

home/topic/2022/0519/11/171c0a592a16587d1f364feb3dc59246.png

添加主机节点

创建完集群后会要求立即添加第一个主机节点,这个主机节点必须是全套Etcd、Control Plane和Worker的。需要注意的是外网IP地址和内网IP地址都要填写和前面的rancher的URL同网段的IP。

home/topic/2022/0607/20/ec71b07e71d7f30845b38b290a3588e8.png

添加成功了!

home/topic/2022/0607/20/5af85ac12eccde421f9f24808282532a.png

查看集群状态,完全正常!

home/topic/2022/0607/20/10ceb91422f2effaa0a2ebe92eb32dd0.png

主机列表

查看主机列表,可以看到福哥添加的tf-node-alpha主机节点的IP是福哥设置的内网IP地址192.168.189.201,后面就会用192.168.189.0这个网络和rancher进行通信了.

home/topic/2022/0607/20/7af067d58a95161e7b816f1ad5007049.png

总结

今天福哥把通过Nginx反向代理Rancher和使用内部网络部署集群的的研究成果分享给了大家,福哥认为这样的部署方式才是使用Rancher搭建k8s集群的正确姿势。