6 - 其他方法


警告 本Chart目前属于测试阶段,您可以在测试或者开发环境使用。

Chart地址: https://github.com/xiaoluhong/server-chart.git

  • 本Chart基于 https://github.com/rancher/server-chart/ 修改,当前支持版本为rancher v2.1.7、v2.1.8、v2.1.9、v2.2.0、v2.2.1、v2.2.2、v2.2.3
  • 不支持LetsEncrypt、cert-manager提供证书,需手动通过Secret导入证书, 默认开启审计日志功能。

一、制作自签名证书或重命名权威认证证书

  • 仓库根目录有一键创建自签名证书脚本,会自动创建cacerts.pemtls.keytls.crt
  1. --ssl-domain: 生成ssl证书需要的主域名,如不指定则默认为localhost,如果是ip访问服务,则可忽略;
  2. --ssl-trusted-ip: 一般ssl证书只信任域名的访问请求,有时候需要使用ip去访问server,那么需要给ssl证书添加扩展IP,多个IP用逗号隔开;
  3. --ssl-trusted-domain: 如果想多个域名访问,则添加扩展域名(TRUSTED_DOMAIN),多个TRUSTED_DOMAIN用逗号隔开;
  4. --ssl-size: ssl加密位数,默认2048
  5. --ssl-date: ssl有效期,默认10年;
  6. --ca-date: ca有效期,默认10年;
  7. --ssl-cn: 国家代码(2个字母的代号),默认CN
  8. 使用示例:
  9. ./create_self-signed-cert.sh --ssl-domain=www.test.com --ssl-trusted-domain=www.test2.com \
  10. --ssl-trusted-ip=1.1.1.1,2.2.2.2,3.3.3.3 --ssl-size=2048 --ssl-date=3650
  • 如果使用权威认证证书,需要重命名crt和key为tls.crttls.key

二、部署架构

1、内部ingress域名访问

通过集群内安装的ingress服务,使用七层域名转发来访问rancher server,请求流量将转发到rancher server容器的80端口。

  • 把服务证书和CA证书作为密文导入K8S

Helm安装配置参考

  1. # 指定kubeconfig配置文件路径
  2. kubeconfig=xxx
  3. # 创建cattle-system命名空间
  4. kubectl --kubeconfig=$kubeconfig \
  5. create namespace cattle-system
  6. # 创建ssl证书密文
  7. kubectl --kubeconfig=$kubeconfig \
  8. -n cattle-system create \
  9. secret tls tls-rancher-ingress \
  10. --cert=./tls.crt --key=./tls.key
  11. # 创建CA证书密文
  12. kubectl --kubeconfig=$kubeconfig \
  13. -n cattle-system create \
  14. secret generic tls-ca \
  15. --from-file=cacerts.pem
  16. # 创建tiller serviceaccount
  17. kubectl --kubeconfig=$kubeconfig \
  18. -n kube-system create \
  19. serviceaccount tiller
  20. # 创建tiller clusterrolebinding
  21. kubectl --kubeconfig=$kubeconfig \
  22. create clusterrolebinding \
  23. tiller --clusterrole cluster-admin \
  24. --serviceaccount=kube-system:tiller
  25. # 安装tiller
  26. helm_version=`helm version |grep Client | awk -F""\" '{print $2}'`
  27. helm --kubeconfig=$kubeconfig init \
  28. --skip-refresh --service-account tiller \
  29. --tiller-image registry.cn-shanghai.aliyuncs.com/rancher/tiller:$helm_version
  • 安装
  1. git clone -b v2.1.7 https://github.com/xiaoluhong/server-chart.git
  2. kubeconfig=xxx.yaml
  3. helm install --kubeconfig=$kubeconfig \
  4. --name rancher \
  5. --namespace cattle-system \
  6. --set rancherImage=rancher/rancher \
  7. --set rancherRegistry=registry.cn-shanghai.aliyuncs.com \
  8. --set busyboxImage=rancher/busybox \
  9. --set hostname=<修改为自己的域名> \
  10. --set privateCA=true \
  11. server-chart/rancher

注意: 1. 通过—kubeconfig=指定kubectl配置文件;2. 如果使用权威ssl证书,则去除—set privateCA=true; 3. 如果为离线安装,可通过rancherImage指定镜像名称,rancherRegistry指定离线私有仓库地址;4. 点击查看更多Chart设置选项

2、主机NodePort访问(主机IP+端口)

有的场景需要使用IP去直接访问rancher server, 因为ingress默认不支持IP访问,所以这里禁用ingress。通过NodePort把rancher server容器端口映射到宿主机的端口上,这个时候rancher server容器作为ssl终止,请求流量转发到rancher server容器的443端口。

  • 把服务证书和CA证书作为密文导入K8S
  1. # 指定kubeconfig配置文件路径
  2. kubeconfig=xxx
  3. # 创建cattle-system命名空间
  4. kubectl --kubeconfig=$kubeconfig create namespace cattle-system
  5. # 创建ssl证书密文
  6. kubectl --kubeconfig=$kubeconfig -n cattle-system create \
  7. secret tls tls-rancher-ingress --cert=./tls.crt --key=./tls.key
  8. # 创建CA证书密文
  9. kubectl --kubeconfig=$kubeconfig -n cattle-system create \
  10. secret generic tls-ca --from-file=cacerts.pem
  11. # 创建tiller serviceaccount
  12. kubectl --kubeconfig=$kubeconfig -n kube-system create \
  13. serviceaccount tiller
  14. # 创建tiller clusterrolebinding
  15. kubectl --kubeconfig=$kubeconfig create clusterrolebinding \
  16. tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
  17. # 安装tiller
  18. helm_version=`helm version |grep Client | awk -F""\" '{print $2}'`
  19. helm --kubeconfig=$kubeconfig init \
  20. --skip-refresh --service-account tiller \
  21. --tiller-image registry.cn-shanghai.aliyuncs.com/rancher/tiller:$helm_version
  • 安装
  1. git clone -b v2.1.7 https://github.com/xiaoluhong/server-chart.git
  2. kubeconfig=xxx.yaml
  3. helm install --kubeconfig=$kubeconfig \
  4. --name rancher \
  5. --namespace cattle-system \
  6. --set rancherImage=rancher/rancher \
  7. --set rancherRegistry=registry.cn-shanghai.aliyuncs.com \
  8. --set busyboxImage=rancher/busybox \
  9. --set service.type=NodePort \
  10. --set service.ports.nodePort=30303 \
  11. --set privateCA=true \
  12. server-chart/rancher

注意: 1. 通过—kubeconfig=指定kubectl配置文件; 2. 如果使用权威ssl证书,则去除—set privateCA=true; 3. 如果为离线安装,可通过rancherImage指定镜像名称,rancherRegistry指定离线私有仓库地址; 4. 通过—set service.ports.nodePort=30303指定自己想要的端口; 5. 点击查看更多Chart设置选项

3、外部七层负载均衡器+主机NodePort方式运行(禁用内部ingress)

有的场景,外部有七层负载均衡器作为ssl终止,常见用法是把负载均衡器的443端口代理到内部应用的非https端口上,比如80。为了保证网络转发性能,这里禁用了内置的ingress服务,以NodePort方式把rancher server容器的80端口映射到宿主机30303端口上。外部七层负载均衡器再把443端口反向代理到Rancher的NodePort端口上,请求流量将转发到rancher server容器的80端口。

  • 把服务证书放在外部负载均衡器上,比如nginx。配置参考: NGIN配置示例

  • 把CA证书作为密文导入K8S

  1. # 指定kubeconfig配置文件路径
  2. kubeconfig=xxx
  3. # 创建cattle-system命名空间
  4. kubectl --kubeconfig=$kubeconfig create namespace cattle-system
  5. # 创建ssl证书密文
  6. kubectl --kubeconfig=$kubeconfig -n cattle-system create \
  7. secret tls tls-rancher-ingress --cert=./tls.crt --key=./tls.key
  8. # 创建CA证书密文
  9. kubectl --kubeconfig=$kubeconfig -n cattle-system create \
  10. secret generic tls-ca --from-file=cacerts.pem
  11. # 创建tiller serviceaccount
  12. kubectl --kubeconfig=$kubeconfig -n kube-system create \
  13. serviceaccount tiller
  14. # 创建tiller clusterrolebinding
  15. kubectl --kubeconfig=$kubeconfig create clusterrolebinding \
  16. tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
  17. # 安装tiller
  18. helm_version=`helm version |grep Client | awk -F""\" '{print $2}'`
  19. helm --kubeconfig=$kubeconfig init \
  20. --skip-refresh --service-account tiller \
  21. --tiller-image registry.cn-shanghai.aliyuncs.com/rancher/tiller:$helm_version
  • 安装
  1. git clone -b v2.1.7 https://github.com/xiaoluhong/server-chart.git
  2. kubeconfig=xxx.yaml
  3. helm install --kubeconfig=$kubeconfig \
  4. --name rancher \
  5. --namespace cattle-system \
  6. --set rancherImage=rancher/rancher \
  7. --set rancherRegistry=registry.cn-shanghai.aliyuncs.com \
  8. --set busyboxImage=rancher/busybox \
  9. --set service.type=NodePort \
  10. --set service.ports.nodePort=30303 \
  11. --set tls=external \
  12. --set privateCA=true \
  13. server-chart/rancher

注意: 1. 通过—kubeconfig=指定kubectl配置文件; 2. 如果使用权威ssl证书,则去除—set privateCA=true; 3. 如果为离线安装,可通过rancherImage指定镜像名称,rancherRegistry指定离线私有仓库地址; 4. 通过—set service.ports.nodePort=30303指定自己想要的端口; 5. 点击查看更多Chart设置选项