k3s安装单节点ingress nginx+rancher

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 \

/etc/systemd/system/k3s.service

然后启动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配置

默认情况下ingress-nginx是获取不到客户端真实ip的,所有访问都是一个内网地址。如果想要客户端ip的话,就要改ingress的service的yaml:

kubectl edit service/ingress-nginx-controller --namespace ingress-nginx

然后找到spec下的externalTrafficPolicy,把值改为Local,完事

service/ingress-nginx-controller配置

安装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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注