traefik暴露kubernetes里的http服务和tcp服务
traefik使用helm安装,搭配metalLB使用,由metalLB分配IP地址给traefik的loadbalancer
helm repo add traefik https://helm.traefik.io/traefik
helm upgrade -i traefik traefik/traefik --version 9.11.0 -f traefik/values.yaml
traefik暴露http服务的例子
配置如下http-ingress.yaml文件,暴露一个nginx,浏览器通过nginx.demo.test.local访问
#http-ingress.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: simpleingressroute
namespace: default
spec:
entryPoints:
- web
routes:
- match: Host(`nginx.demo.test.local`)
kind: Rule
services:
- name: test-demo-service
port: 80
解释:
- metadata.name不能重复
- Host(
nginx.demo.test.local
)表示接受到浏览器访问nginx.aimp.sferetest.local的时候,转到test-demo-service服务的80端口 - entryPoints对应的是我们安装traefik时,values.yaml里的ports参数下面的名称,如web的8000是内部端口,80是对外提供访问的端口
#values.yaml
ports:
# The name of this one can't be changed as it is used for the readiness and
# liveness probes, but you can adjust its config to your liking
web:
port: 8000
# hostPort: 8000
expose: true
exposedPort: 80
# The port protocol (TCP/UDP)
protocol: TCP
traefik暴露tcp服务的例子
配置如下tcp-ingress.yaml文件,暴露一个redis,通过loadbalancerIP:6851访问
# tcp-ingress.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
name: redisingleressroute
namespace: test
spec:
entryPoints:
- redis
routes:
- match: HostSNI(`*`)
kind: Rule
services:
- name: redis
port: 6379
解释:
- kind得是IngressRouteTCP
- match必须是HostSNI(
*
) - entryPoints对应的是我们安装traefik时,values.yaml里的ports参数下面的名称,如redis的6379是内部端口,6851是对外提供访问的端口
#values.yaml
redis:
port: 6379
# hostPort: 8000
expose: true
exposedPort: 6851
# The port protocol (TCP/UDP)
protocol: TCP