k3s自己带的是traefik,纵然traefik他又快又好使,但是有的时候nginx的规则和模块就是刚需,咱一时间也不想抽空去折腾traefik,只能给他安排上ingress-nginx了。不过貌似安这玩意也挺折腾的,不知道是不是因为大家都是Kubernetes高手,资料比较少。
需要先安装好kubectl和helm
安装k3s与ingress-nginx
k3s的安装命令是:
curl -sfL https://get.k3s.io | sh -s - server
如果你在安装前就不打算用traefik,就要在安装前配个环境变量:
** k3s v1.25+ 之后 flag –no-deploy 弃用,更改为 –disable,但安装前需要确认 rancher 支持的 k3s 版本范围,目前 v1.25+ 不在 rancher 支持范围内,需要使用环境变量 INSTALL_K3S_VERSION 指定安装版本
export INSTALL_K3S_EXEC="server --no-deploy traefik"
安装完后配一下 helm
sudo cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
然后跳到安装ingress
如果你和我一样是安好了集群放了东西打算改用ingress-nginx,就要先卸载:
kubectl -n kube-system delete helmcharts.helm.cattle.io traefik
helm uninstall traefik-crd --namespace kube-system
sudo service k3s stop
然后编辑/etc/systemd/system/k3s.service
,在ExecStart后面加一行:--no-deploy traefik \
然后启动k3s:sudo service k3s start
之后安装ingress:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --set controller.service.type=LoadBalancer --create-namespace
如果你想让ingress-nginx成为默认负载均衡器,就执行:
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --set controller.service.type=LoadBalancer --set controller.ingressClassResource.default=true --set controller.watchIngressWithoutClass=true
否则就要在ingress的yaml中的spec下加一行ingressClassName: nginx
才能使用ingress-nginx
默认情况下ingress-nginx是获取不到客户端真实ip的,所有访问都是一个内网地址。如果想要客户端ip的话,就要改ingress的service的yaml:
kubectl edit service/ingress-nginx-controller --namespace ingress-nginx
然后找到spec下的externalTrafficPolicy,把值改为Local,完事
安装Rancher
*每一步helm install
都需要确认上一步已经全部完成:确认kubectl get all --all-namespaces
的列出项中没有正在等待(pending)、正在创建、出错(Error)的情况,出错及时看pod日志修一修然后重新执行install。
如果出现访问内网地址失败且错误信息为no routes之类的时候,一般是iptables没有放行导致的,放行:
iptables -I INPUT 3 -s 10.42.0.0/16 -j ACCEPT
iptables -I INPUT 3 -d 10.42.0.0/16 -j ACCEPT
iptables-save
如果只想用2.5.x的话,用rancherD安装就好了,一条命令搞定(不用装k3s,自带ingress-nginx)。除了套件是rke的之外没啥区别。
然后是安装命令们(安装最新版):
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
kubectl create namespace cattle-system
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --create-namespace --version v1.7.1
helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=【你的rancher仪表盘域名】 --set bootstrapPassword=【你的初始密码】
然后等rancher安装完成:
kubectl -n cattle-system rollout status deploy/rancher
然后开用。要换掉初始rancher证书的话,改一下cattle-system/ingress/rancher的证书就好了
如果哪一步没整好,想重新装,也非常简单:直接卸掉k3s当什么都没发生就好了
/usr/local/bin/k3s-uninstall.sh