Bootstrap

Kubernetes环境Traefik部署与应用

采用进行许可。由转载自

更新记录

概述

本文用于整理基于环境的部署与应用,实现、七层/四层反向代理等功能。

本次演练环境为集群环境,环境配置可参考笔者另一篇笔记《》。

组件版本

  • v2.5.3

  • v10.3.6

配置过程

安装Traefik

  • 配置

helm repo add traefik https://helm.traefik.io/traefik
helm repo update
  • 安装Traefik

  • 本次演练中将安装至命名空间,可根据需要替换。

# deployment.replicas=3                设置Traefik部署副本数
# pilot.dashboard=false                禁用Dashboard中Pilot链接
# ingressRoute.dashboard.enabled=false 禁用默认Dashboard入口规则(将在后续步骤中手动创建)
helm upgrade --install --namespace kube-system \
  --set deployment.replicas=3 \
  --set pilot.dashboard=false \
  --set ingressRoute.dashboard.enabled=false \
  traefik traefik/traefik
  • 其他准备工作

  • 获取服务的负载均衡器地址。执行该命令,记录返回的地址备用。本次演练环境中,已将和指向该地址。

kubectl get svc traefik -n kube-system

创建一个用于部署演练用对象的命名空间。本次演练中使用命名空间,可根据需要替换。

kubectl create namespace apps-choral

部署Dashboard

  • 创建

  • 创建一个,用于配置和的入口规则。

  • 本次演练中,使用域名访问,可根据需要替换。

cat <
  • 启用认证

  • 首先,创建一个用于保存用户名和密码的,其中的字段内容可使用工具生成。本次演练中,认证和都是。

cat <

创建一个中间件,用于对请求启用认证。

cat <

更新的,启用中间件。

cat <

七层反向代理

HTTP应用示例

  • 部署应用

  • 创建,部署应用。

cat <

创建一个用于访问应用的服务。

cat <

创建一个,用于配置应用的入口规则。

cat <

启用TLS(HTTPS)

本次演练使用静态证书配置TLS,该证书被手动创建,应用于和域名。

有关自动证书管理,可参考项目文档。

  • 更新Traefik运行参数

# ports.web.redirectTo=websecure                          启用Web跳转至WebSecure
# additionalArguments[0]=--entrypoints.websecure.http.tls Ingress默认启用TLS
helm upgrade --install --namespace kube-system \
  --set deployment.replicas=3 \
  --set pilot.dashboard=false \
  --set ingressRoute.dashboard.enabled=false \
  --set ports.web.redirectTo=websecure \
  --set additionalArguments[0]=--entrypoints.websecure.http.tls \
  traefik traefik/traefik
  • 创建TLS证书

  • 从已准备好的证书文件和文件创建。

kubectl create secret tls local-choral-io-tls -n kube-system --key=local.choral.io.key --cert=local.choral.io.crt
  • 更新的

  • 更新的,启用配置。

cat <
  • 更新的

  • 更新的,启用配置。

cat <

四层反向代理

TCP应用示例

  • 更新Traefik运行参数

  • 更新Traefik运行参数,创建新的。

# ports.whoamitcp.protocol=TCP     网络协议
# ports.whoamitcp.port=8081        监听端口
# ports.whoamitcp.exposedPort=8081 服务公开端口
# ports.whoamitcp.expose=true      是否暴露端口
helm upgrade --install --namespace kube-system \
  --set deployment.replicas=3 \
  --set pilot.dashboard=false \
  --set ingressRoute.dashboard.enabled=false \
  --set ports.web.redirectTo=websecure \
  --set additionalArguments[0]=--entrypoints.websecure.http.tls \
  --set ports.whoamitcp.protocol=TCP \
  --set ports.whoamitcp.port=8081 \
  --set ports.whoamitcp.exposedPort=8081 \
  --set ports.whoamitcp.expose=true \
  traefik traefik/traefik
  • 部署应用

  • 创建,部署应用。

cat <

创建一个用于访问应用的服务。

cat <

创建一个,用于配置应用的入口规则。

cat <

验证反向代理和服务运行状态。

# `10.0.0.201`是`traefik`服务的负载均衡器地址(kubectl get svc traefik -n kube-system)
echo "Hello" | socat - tcp4:10.0.0.201:8081
# 终端回显如下内容
Received: Hello

UDP应用示例

  • 更新Traefik运行参数

  • 更新Traefik运行参数,创建新的。

# ports.whoamiudp.protocol=UDP     网络协议
# ports.whoamiudp.port=8082        监听端口
# ports.whoamiudp.exposedPort=8082 服务公开端口
# ports.whoamiudp.expose=true      是否暴露端口
helm upgrade --install --namespace kube-system \
  --set deployment.replicas=3 \
  --set pilot.dashboard=false \
  --set ingressRoute.dashboard.enabled=false \
  --set ports.web.redirectTo=websecure \
  --set additionalArguments[0]=--entrypoints.websecure.http.tls \
  --set ports.whoamitcp.protocol=TCP \
  --set ports.whoamitcp.port=8081 \
  --set ports.whoamitcp.exposedPort=8081 \
  --set ports.whoamitcp.expose=true \
  --set ports.whoamiudp.protocol=UDP \
  --set ports.whoamiudp.port=8082 \
  --set ports.whoamiudp.exposedPort=8082 \
  --set ports.whoamiudp.expose=true \
  traefik traefik/traefik
  • 部署应用

  • 创建,部署应用。

cat <

创建一个用于访问应用的服务。

cat <

创建一个,用于配置应用的入口规则。

cat <

验证反向代理和服务运行状态。

# `10.0.0.202`是`traefik-udp`服务的负载均衡器地址(kubectl get svc traefik-udp -n kube-system)
echo "Hello" | socat - udp4:10.0.0.202:8082
# 终端回显如下内容
Received: Hello

参考资料

  • https://github.com/traefik/traefik-helm-chart

  • https://doc.traefik.io/traefik/providers/kubernetes-crd/

  • https://doc.traefik.io/traefik/providers/kubernetes-ingress/

  • https://doc.traefik.io/traefik/middlewares/http/basicauth/