app开发者平台在数字化时代的重要性与发展趋势解析
968
2022-08-28
kubernetes 安装traefik2.8
一、安装
安装 Resource Definition and RBAC
# Install Traefik Resource Definitions: kubectl apply -f # Install RBAC for Traefik: kubectl apply -f deployment
kubectl apply -f kubectl apply -f 方式安装traefik
用configmap来配置,常用参数已备注添加了2个providers,以及ingressclass
02-traefik-config-cm.yaml
kind: ConfigMap apiVersion: v1 metadata: name: traefik-config data: traefik.yaml: |- global: checkNewVersion: false ## 周期性的检查是否有新版本发布 sendAnonymousUsage: false ## 周期性的匿名发送使用统计信息 serversTransport: insecureSkipVerify: true ## Traefik 忽略验证代理服务的 TLS 证书 api: insecure: true ## 允许 HTTP 方式访问 API dashboard: true ## 启用 Dashboard debug: false ## 启用 Debug 调试模式 metrics: prometheus: ## 配置 Prometheus 监控指标数据,并使用默认配置 addRoutersLabels: true ## 添加 routers metrics entryPoint: metrics ## 指定 metrics 8082为metric监听地址 entryPoints: web: address: ":80" ## 配置 80 端口,并设置入口名称为 web forwardedHeaders: insecure: true ## 信任所有的forward headers websecure: address: ":443" ## 配置 443 端口,并设置入口名称为 websecure forwardedHeaders: insecure: true traefik: address: ":8090" ## 配置 8090 端口,并设置入口名称为 dashboard metrics: address: ":8082" ## 配置 8082 端口,作为metrics收集入口 tcp: address: ":8079" ## 配置 8079 端口,作为tcp访问入口 providers: kubernetesCRD: ## 启用 Kubernetes CRD 方式来配置路由规则 ingressClass: traefik-v2.8 allowCrossNamespace: true ##允许跨namespace allowEmptyServices: true ##允许空endpoints的service kubernetesIngress: ## 启动 Kubernetes Ingress 方式来配置路由规则 ingressClass: traefik-v2.8 log: filePath: "/etc/traefik/logs/traefik.log" ## 设置调试日志文件存储路径,如果为空则输出到控制台 level: error ## 设置调试日志级别 format: "common" ## 设置调试日志格式 accessLog: filePath: "/etc/traefik/logs/access.log" ## 设置访问日志文件存储路径,如果为空则输出到控制台 format: "common" ## 设置访问调试日志格式 bufferingSize: 0 ## 设置访问日志缓存行数 filters: #statusCodes: ["200"] ## 设置只保留指定状态码范围内的访问日志 retryAttempts: true ## 设置代理访问重试失败时,保留访问日志 minDuration: 20 ## 设置保留请求时间超过指定持续时间的访问日志 fields: ## 设置访问日志中的字段是否保留(keep 保留、drop 不保留) defaultMode: keep ## 设置默认保留访问日志字段 names: ## 针对访问日志特别字段特别配置保留模式 ClientUsername: drop StartUTC: drop ## 禁用日志 timestamp 使用UTC headers: ## 设置 Header 中字段是否保留 defaultMode: keep ## 设置默认保留 Header 中字段 names: ## 针对 Header 中特别字段特别配置保留模式 #User-Agent: redact ## 可以针对指定agent Authorization: drop Content-Type: keep
部署Traefik
使用Daemonset部署,使用本地网络。避免使用pod网络造成网络性能损耗根据node label来指定部署节点
03-traefik-ds.yaml
apiVersion: v1 kind: ServiceAccount metadata: namespace: default name: traefik-ingress-controller --- apiVersion: apps/v1 kind: DaemonSet metadata: name: traefik-ingress-controller namespace: default labels: app: traefik spec: selector: matchLabels: app: traefik template: metadata: annotations: prometheus.io/path: /metrics prometheus.io/port: "8082" prometheus.io/scrape: "true" name: traefik labels: app: traefik spec: serviceAccountName: traefik-ingress-controller terminationGracePeriodSeconds: 1 containers: - image: harbor.foxchan.com/traefik/traefik:v2.8.1 name: traefik-ingress-lb env: - name: KUBERNETES_SERVICE_HOST ##手动指定k8s api,避免网络组件不稳定。 value: "k8s.foxchan.com" - name: KUBERNETES_SERVICE_PORT_HTTPS value: "8443" - name: KUBERNETES_SERVICE_PORT value: "8443 - name: TZ ##指定时区 value: Asia/Shanghai ports: - name: web containerPort: 80 hostPort: 80 ## 将容器端口绑定所在服务器的 80 端口 - name: websecure containerPort: 443 hostPort: 443 ## 将容器端口绑定所在服务器的 443 端口 - name: admin containerPort: 8090 ## Traefik Dashboard 端口 securityContext: capabilities: drop: - ALL add: - NET_BIND_SERVICE args: - --configfile=/config/traefik.yaml volumeMounts: - mountPath: "/config" name: "config" - mountPath: /etc/traefik/logs name: logdir - mountPath: /etc/localtime name: timezone readOnly: true volumes: - name: config configMap: name: traefik-config - name: logdir hostPath: path: /data/traefik/logs type: "DirectoryOrCreate" - name: timezone #挂载时区文件 hostPath: path: /etc/localtime type: File tolerations: ## 设置容忍所有污点,防止节点被设置污点 - operator: "Exists" hostNetwork: true ## 开启host网络,提高网络入口的网络性能 nodeSelector: ## 设置node筛选器,在特定label的节点上启动 IngressProxy: "traefik2"
其他内容,看之前的历史文档,没有什么大的改变
二、Traefik 连接指定kubernetes 集群
2.1 官方文档描述
当部署到Kubernetes中时,Traefik读取环境变量KUBERNETES_SERVICE_HOST和KUBERNETES_SERVICE_PORT或KUBECONFIG来构建endpoint。
部署在kubernetes时,两个都会自动挂载
access token : /var/run/secrets/kubernetes.io/serviceaccount/token
SSL CA : /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
可以指定配置文件来覆盖集群内的环境变量。
当找不到环境变量时,Traefik尝试使用外部集群客户端连接到Kubernetes API服务器。在这种情况下,需要endpoint指定。
配置如下:
providers: kubernetesCRD: endpoint: " token: "mytoken" certAuthFilePath: "/my/ca.crt"
2.2 获取token
获取kubernetes集群traefik-ingress-controller 的token
#检查所有可用的集群,因为 KUBECONFIG 可能有多个集群配置 kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}' #示例如下 Cluster name Server kubernetes #从上面的输出中选择你要连接的集群名 export CLUSTER_NAME="kubernetes" # 选择指定集群的API server export APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}") # 获取token export TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='traefik-ingress-controller')].data.token}"|base64 --decode) # 持token 访问API curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
如果成功了,你应该收到以下响应:
{ "kind": "APIVersions", "versions": [ "v1" ], "serverAddressByClientCIDRs": [ { "clientCIDR": "0.0.0.0/0", "serverAddress": "192.168.1.33:6443" } ] }
2.3 配置
在新文件夹kubernetes_data中存储ca.crt文件,该文件用于验证对Kubernetes授权的调用。这是可以在kubeconfig文件的clusters-> cluster-> certificate-authority-data下找到的证书
挂载出来
volumes: ... - ./kubernetes_data:/var/run/secrets/kubernetes.io/serviceaccount
修改Traefik 2 kubernetescrd
- "--providers.kubernetescrd=true" - "--providers.kubernetescrd.endpoint= - "--providers.kubernetescrd.certauthfilepath=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt" - "--providers.kubernetescrd.token=mytoken
重大变更
从2.8 开始,traefik放弃Pilot ,改为Traefik Hub
参考
kubernetes 部署 traefik2.3
kubernetes 部署 traefik2.5
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~