安装helm
下载地址
https://github.com/helm/helm/releases
安装
wget https://get.helm.sh/helm-v3.16.2-linux-amd64.tar.gz
tar -zxvf helm-v3.16.2-linux-amd64.tar.gz
cd linux-amd64/
chmod 755 helm
mv helm /usr/local/bin/
helm version
添加traefik的helm源
helm repo add traefik https://traefik.github.io/charts
helm repo update
下载traefik charts到本地
helm search repo traefik/traefik -l
helm pull traefik/traefik --version 32.1.1
解压
tar zxvf traefik-32.1.1.tgz
cd traefik/
安装traefik
kubectl create ns traefik-ns
helm install --namespace=traefik-ns traefik .
查看启动情况
kubectl get all -n traefik-ns
因为没有替换国内镜像源,必然出现拉取镜像失败。
NAME READY STATUS RESTARTS AGE
pod/traefik-76d7646498-wjzld 0/1 ImagePullBackOff 0 7m5s
查看具体拉取失败的镜像
kubectl describe pod traefik-76d7646498-wjzld -n traefik-ns
拉取国内镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/traefik:v3.1
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/traefik:v3.1 docker.io/traefik:v3.1.6
docker save -o traefik.tar docker.io/traefik:v3.1.6
scp traefik.tar root@10.0.2.12:/root
ssh 10.0.2.12
docker load -i traefik.tar
访问dashboard,参考
https://kkgithub.com/traefik/traefik-helm-chart/blob/master/EXAMPLES.md
https://doc.traefik.io/traefik/operations/dashboard/
修改values.yaml,开启dashboard规则转发
ingressRoute:
dashboard:
enabled: true
配置端口转发来实现
kubectl -n traefik-ns port-forward $(kubectl -n traefik-ns get pods --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000
通过http://127.0.0.1:9000/dashboard
以下内容验证时,访问 traefik 的 dashboard 总是报错误 404,有待再次验证
自定义 values.yaml
在traefik-helm-chart目录创建一个定制的 values 配置文件(备注:如果不熟悉配置可以使用官方默认的配置文件)。
vim values-custom.yaml
写入以下内容
# values-custom.yaml
# Create an IngressRoute for the dashboard
ingressRoute:
dashboard:
enabled: false # 禁用 helm 中渲染的 dashboard,后面手动创建
# Configure ports
ports:
web:
port: 8000
nodePort: 31800 # 使用 NodePort 模式
websecure:
port: 8443
nodePort: 31443
# Service
service:
enabled: true
type: NodePort # 使用 NodePort 模式
# Logs
logs:
general:
level: DEBUG
安装 traefik
helm install -n traefik-ns traefik ./ -f values-custom.yaml
查看 traefik 的运行状态
kubectl get pods,svc -n traefik-ns -o wide
查看pod的资源清单来了解Traefik的运行方式
kubectl get pods traefik-6b7d8fcc6f-lqqmp -n traefik-ns -o yaml
spec:
automountServiceAccountToken: true
containers:
- args:
- --global.checknewversion
- --global.sendanonymoususage
- --entryPoints.metrics.address=:9100/tcp
- --entryPoints.traefik.address=:9000/tcp
- --entryPoints.web.address=:8000/tcp
- --entryPoints.websecure.address=:8443/tcp
- --api.dashboard=true
- --ping=true
- --metrics.prometheus=true
- --metrics.prometheus.entrypoint=metrics
- --providers.kubernetescrd
- --providers.kubernetescrd.allowEmptyServices=true
- --providers.kubernetesingress
- --providers.kubernetesingress.allowEmptyServices=true
- --entryPoints.websecure.http.tls=true
- --log.level=DEBUG
从容器参数上可以看到entryPoints定义了web和websecure两个入口,并且provider开启了kubernetescrd和kubernetesingress。也就是既可以使用Kubernetes自身的Ingress资源对象,也可以使用Traefik扩展的IngressRoute类型的CRD资源对象来定义入口。
访问dashboard
使用IngressRoute资源清单部署一个Traefik Dashboard入口。创建dashboard.yaml文件
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: dashboard
namespace: traefik-ns
spec:
entryPoints: # 入口点使用 web
- traefik
routes:
- match: (PathPrefix(`/dashboard`) || PathPrefix(`/api`)) # 路由匹配规则,/dashboard 对静态页,/api 对接口
kind: Rule
services:
- name: api@internal
kind: TraefikService # Helm 安装 Traefik 时创建的自定义Service
部署
kubectl apply -f dashboard.yaml
部署完成后如果你是在云厂商的机器上,就可以使用Node节点的公网 IP + Traefik 的 Service 暴露出的端口号进行访问。如果是本地环境使用内网 IP。
参考:
https://doc.traefik.io/traefik/getting-started/install-traefik/#use-the-helm-chart
https://blog.linganmin.cn/posts/2d15ed93/
https://kkgithub.com/traefik/traefik-helm-chart/blob/master/EXAMPLES.md
https://zhuanlan.zhihu.com/p/466892515