介绍
介绍
Rancher要求所有节点服务器和Rancher管理服务器之间的网络是完全通畅的,而且Rancher还要自己霸占80和443端口,如果按照Rancher的要求把Rancher管理服务器的网络完全放开似乎的最简单的办法!可是,一个管理服务器集群的总司令部完全暴露出来,这实在是有点恐怖~~
为此,福哥想到了将Rancher集群部署在内部网络里面,内部网络各个服务器之间完全不做限制,对外只要把管理服务器的80和443端口开放给我们的运维管理员就可以了,这样的话既保证了服务器集群的安全又满足了Rancher对服务器的要求,完美地解决了这个问题~~
安装
VMware
通畅情况下服务器都会有至少两个网口,一个公网,一个内网。福哥用的是VMware虚拟机,为了模拟服务器的双网口福哥给每个虚拟机单独增加了一个仅主机的网络(这个仅主机的网络和真实服务器的内网网络基本是一样的)。
Rancher管理服务器
公网IP:192.168.168.116
内网IP:192.168.189.116
Rancher节点
公网IP:192.168.168.201
内网IP:192.168.189.201
安装
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
复制rancher.tongfu.net证书。
docker cp rancher.tongfu.net.crt nginx:/etc/nginx/ docker cp rancher.tongfu.net.key nginx:/etc/nginx/
重启nginx服务。
docker restart nginx
配置
Rancher Server URL
设置server URL的时候一定要设置为内网IP,因为内网的网络权限是完全放开的。
添加主机节点
创建完集群后会要求立即添加第一个主机节点,这个主机节点必须是全套Etcd、Control Plane和Worker的。需要注意的是外网IP地址和内网IP地址都要填写和前面的rancher的URL同网段的IP。
添加成功了!
查看集群状态,完全正常!
主机列表
查看主机列表,可以看到福哥添加的tf-node-alpha主机节点的IP是福哥设置的内网IP地址192.168.189.201,后面就会用192.168.189.0这个网络和rancher进行通信了.
总结
今天福哥把通过Nginx反向代理Rancher和使用内部网络部署集群的的研究成果分享给了大家,福哥认为这样的部署方式才是使用Rancher搭建k8s集群的正确姿势。