中文版:https://whmzsu.github.io/helm-doc-zh-cn/quickstart/tiller_ssl-zh_cn.html
https://hub.helm.sh/charts/stable
https://whmzsu.github.io/helm-doc-zh-cn/quickstart/using_helm-zh_cn.html
一、 前提条件:
必须安装了kubernetes集群
必须拥有本地配置好的kubectl
二、安装client端(Helm CLI)
#脚本安装
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh
chmod u+x get_helm.sh
./get_helm.sh
#二进制安装
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.14.0-linux-amd64.tar.gz
tar -xzvf helm-v2.14.0-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/helm && cp linux-amd64/tiller /usr/local/bin/tiller
三、安装server端(tiller是服务端组件,会安装到kubernetes集群里)
#安装ssl/tls的tiller(https://helm.sh/docs/using_helm/#using-ssl-between-helm-and-tiller)
cd /etc/kubernetes/pki && mkdir helm
cd helm
#制作CA RSA私钥
openssl genrsa -out ./ca.key.pem 4096
#制作CA根证书
openssl req -key ca.key.pem -new -x509 -days 7300 -sha256 -out ca.cert.pem -extensions v3_ca -subj "/C=CN/O=HELM/CN=HELM"
#生成tiller RSA私钥
openssl genrsa -out ./tiller.key.pem 4096
#生成helm RSA私钥
openssl genrsa -out ./helm.key.pem 4096
#生成tiller私钥的签名请求对(csr)
openssl req -key tiller.key.pem -new -sha256 -out tiller.csr.pem -subj "/C=CN/O=HELM/CN=TILLER"
#生成helm私钥的签名请求(csr)
openssl req -key helm.key.pem -new -sha256 -out helm.csr.pem -subj "/C=CN/O=HELM/CN=HELM"
#使用CA根证书对tiller的签名请求(csr)签名
#openssl x509 -req -CA ca.cert.pem -CAkey ca.key.pem -CAcreateserial -in tiller.csr.pem -out tiller.cert.pem -days 365
#默认情况下,Helm 客户端通过隧道(即 kube 代理)127.0.0.1 连接到 Tiller。 在 TLS 握手期间,通常提供主机名(例如 example.com),对证书进行检查,包括附带的信息。 但是,由于通过隧道,目标是 IP 地址。因此,要验证证书,必须在 Tiller 证书中将 IP 地址 127.0.0.1 列为 IP 附带备用名称(IP SAN: IP subject alternative name)。
例如,要在生成 Tiller 证书时将 127.0.0.1 列为 IP SAN:
echo subjectAltName=IP:127.0.0.1 > extfile.cnf
openssl x509 -req -CA ca.cert.pem -CAkey ca.key.pem -CAcreateserial -in tiller.csr.pem -out tiller.cert.pem -days 365 -extfile extfile.cnf
#使用CA根证书对helm的签名请求(csr)签名
openssl x509 -req -CA ca.cert.pem -CAkey ca.key.pem -CAcreateserial -in helm.csr.pem -out helm.cert.pem -days 365
#查看证书内容命令
openssl x509 -text -noout -in tiller.cert.pem
#初始化tiller(注意helm客户端版本要跟服务端tiller images版本兼容)
cd ~
#无安全认证
helm init --history-max=0 --debug --upgrade --service-account tiller --tiller-namespace kube-system --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
#启用TLS安全认证(后续教程启用了TLS)
helm init --history-max=0 --debug --upgrade --service-account tiller --tiller-namespace kube-system --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts --tiller-tls --tiller-tls-cert /etc/kubernetes/pki/helm/tiller.cert.pem --tiller-tls-key /etc/kubernetes/pki/helm/tiller.key.pem --tiller-tls-verify --tls-ca-cert /etc/kubernetes/pki/helm/ca.cert.pem
#kubernetes上给tiller新建账户和角色(helm-tiller.yaml详见同级目录的helm-tiller.yaml)
kubectl create --save-config -f helm-tiller.yaml
#kubectl delete -f helm-tiller.yaml
#查看授权是否成功
kubectl get deploy --namespace kube-system tiller-deploy --output yaml | grep serviceAccount
四、配置client tls
#执行 helm ls 会报错:Error: transport is closing,这是因为您的 Helm 客户端没有正确的证书来向 Tiller 进行身份验证。
helm ls --debug
helm ls --tls --tls-ca-cert /etc/kubernetes/pki/helm/ca.cert.pem --tls-cert /etc/kubernetes/pki/helm/helm.cert.pem --tls-key /etc/kubernetes/pki/helm/helm.key.pem --debug
#更快捷的方式是
\cp -f /etc/kubernetes/pki/helm/ca.cert.pem $HOME/.helm/ca.pem
\cp -f /etc/kubernetes/pki/helm/helm.cert.pem $HOME/.helm/cert.pem
\cp -f /etc/kubernetes/pki/helm/helm.key.pem $HOME/.helm/key.pem
helm ls --tls --debug
五、验证
helm version --tls --debug
kubectl get pods -n kube-system | grep tiller
kubectl -n kube-system get deployment
kubectl logs $(kubectl get pods -n kube-system | grep tiller | awk '{print $1}') -n kube-system
#查看服务
kubectl get svc -n kube-system | grep tiller
#验证端口
kubectl get pods tiller-deploy-c595846c-vf4vr --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}' -n kube-system
六、如何删除和重置
kubectl delete deployment tiller-deploy -n kube-system
kubectl delete service tiller-deploy -n kube-system
kubectl delete -f helm-tiller.yaml
rm -rf $HOME/.helm
或者
helm reset -f && helm reset --remove-helm-home(存在无法连接tiller pod,reset失败的情况,只能使用上面的办法删除)
七、使用helm
helm search
helm repo list
helm repo update
helm list --tls
#因为kubernetes集群开启了rbac,所以安装的时候需要创建rbac权限
helm install stable/nginx-ingress --name nginx-ingress --tls --debug --set rbac.create=true
#查看状态
helm status nginx-ingress --tls
#升级版本
helm upgrade nginx-ingress stable/nginx-ingress -f ./values.yaml --tls