在 Kubernetes 1.23 版本中,Traefik 可以使用 Deployment 和 Service 对象来部署和暴露。
首先,您需要创建一个 Traefik 的 Deployment。这个 Deployment 配置将告诉 Kubernetes 如何运行 Traefik 容器。下面是一个示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: traefik
spec:
selector:
matchLabels:
app: traefik
replicas: 1
template:
metadata:
labels:
app: traefik
spec:
containers:
- name: traefik
image: traefik:v2.5 # 替换成您自己的 Traefik 镜像版本号
args:
- --api.insecure=true # 允许未加密的 API 访问,请根据您的实际情况进行修改。
- --providers.kubernetescrd=true # 启用 Kubernetes CRD 提供程序。
- --providers.kubernetesingress=true # 启用 Kubernetes Ingress 提供程序。
- --entrypoints.web.address=:80 # 监听 HTTP 流量的入口点地址和端口号。请注意,Traefik 默认监听 80 和 443 端口,并且如果要监听 HTTPS 流量,则需要配置 TLS 设置。
接下来,您可以创建一个 Traefik 的 Service 对象,用于暴露 Traefik Pod 内容:
apiVersion: v1
kind: Service
metadata:
name: traefik-service
spec:
selector:
app: traefik # 将 Service 与 Traefik 的 Deployment 相关联
ports:
- name: http
port: 80 # 对外暴露的端口号,必须与上面 Traefik 配置文件中 entrypoints.web.address 的端口一致
targetPort: 80 # Traefik 容器运行的端口号,也是 HTTP 流量入口点地址的监听端口。
接下来,您可以创建一个 Ingress 资源对象,并将其配置为使用 Traefik。这个 Ingress 配置告诉 Kubernetes 如何路由流量到不同的服务和后端 Pod 中。以下是一个示例:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: traefik # 告诉 Kubernetes 使用 Traefik 来处理此 Ingress 资源。
spec:
rules:
- host: example.com # 替换为您自己的域名或 IP 地址。
http:
paths:
- path: /
backend:
serviceName: my-service # 您要路由到的后端服务名称(请确保该服务已在 Kubernetes 中定义)。
servicePort: 80 # 后端服务暴露出去的端口号。
最后,使用 kubectl apply
命令应用所有配置文件:
kubectl apply -f traefik-deployment.yaml
kubectl apply -f traefik-service.yaml
kubectl apply -f ingress.yaml
这样,Traefik 就已经在 Kubernetes 中运行,并可以通过 Ingress 资源对象来访问您的服务。