安装traefik
使用helm安装
- 安装traefik 存储库
helm repo add traefik https://traefik.github.io/charts
- 设置自定义安装文件
service:
type: NodePort # 设置service方式 因为我这是私有云 没有loadBalancer
ports:
traefik:
port: 9000
expose:
default: false
exposedPort: 9000
protocol: TCP
web:
port: 8000
expose:
default: true
exposedPort: 80
protocol: TCP
nodePort: 80 # 绑定到node的端口
websecure:
port: 8443
expose:
default: true
exposedPort: 443
protocol: TCP
nodePort: 443 # 绑定到node的端口
http3:
enabled: false
tls:
enabled: true
# this is the name of a TLSOption definition
options: ""
certResolver: ""
domains: []
middlewares: []
tlsStore: # 这个下面解释
default:
defaultCertificate:
secretName: xxxx
ingressRoute: # 配置dashboa
dashboard:
enabled: true
matchRule: Host(`xxxx.com`)
entryPoints:
- "web"
- "websecure"
middlewares:
#- name: traefik-dashboard-auth #不启用权限插件
extraObjects: # 为dashboard做的额外配置
- apiVersion: v1
kind: Secret
metadata:
name: traefik-dashboard-auth-secret
type: kubernetes.io/basic-auth
stringData:
username: admin
password: xxxxxx # 配置进dashboard的密码
- apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: traefik-dashboard-auth
spec:
basicAuth:
secret: traefik-dashboard-auth-secret
# 如果需要指定pod部署到指定的机器上,需要设置selector,我这里没设置
# nodeSelector:
我这里使用了nodeport绑定了两个端口(80,,443),端口比较小,k8s 支持的端口范围是(30000-32767),如未设置,需要去master节点对应的api-server文件中进行修改,具体修改百度
- 安装
helm install -f traefik-values.yaml traefik traefik/traefik
配置ssl (上面的tls这里解释)
使用traefik的原因,一来是作为k8s的网关,二来是配置ssl也比较方便,官方在github里面介绍了两种在安装时配置ssl的方式,我这里使用的是第二种(使用cert-manager + cloudflare)
配置cloudflare
- 创建账号
- 绑定域名(自己的域名-备案过最好)
- 去自己的域名注册商修改域名的dns地址(我这里用的是在百度买的域名,点击详情 修改dns地址为cloudflare的dns地址)
- 生成令牌
安装cert-manager
helm repo add jetstack https://charts.jetstack.io --force-update
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.15.0 \
--set crds.enabled=true
生成对应的Secret 以及 Issuer,Certificate
- 生成对应的 apply yaml文件
cat > acme-values.yml << EOF
---
apiVersion: v1
kind: Secret
metadata:
name: cloudflare
namespace: traefik
type: Opaque
stringData:
api-token: XXX # 这里填cloudflare上的令牌
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: cloudflare
namespace: traefik
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: email@example.com # 这里填cloudflare的账号邮箱
privateKeySecretRef:
name: cloudflare-key
solvers:
- dns01:
cloudflare:
apiTokenSecretRef:
name: cloudflare
key: api-token
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: wildcard-example-com # 最好改成自己的域名-com
namespace: traefik
spec:
secretName: wildcard-example-com-tls # 最好改成自己的域名-tls
dnsNames:
- "example.com" # 配置自己的域名
- "*.example.com" # 配置自己的子域名
issuerRef:
name: cloudflare
kind: Issuer
EOF
- apply 配置文件
kubectl apply -f acme-values.yml
- 查看是否生效
kubectl get certificate -n traefik
要保证ready状态为 true,如果一直出错 就去对用的pods去查找错误,但是一般也不会出错,如果按步骤来的
- 配置上面的tls (即helm安装traefik时的自定义配置文件里面的tlsStore选项)
tlsStore:
default:
defaultCertificate:
secretName: wildcard-example-com-tls
至此,ssl相关的配置已经结束了
配置ssl的demo
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: example-com-tls
spec:
entryPoints:
- web
routes:
- match: Host(`test.example.com`)
kind: Rule
services:
- name: XXXX
port: 80
(2024-06-24 追加)对接管局
前两天收到百度云发来的短信跟邮件,说我的域名检测有问题,大概两点,1.域名解析服务在境外(因为我使用了cloudflare)2.网站首页没有显示备案号跟工信部查询地址
这里的解决方案是将自己的dns解析服务使用国内的提供商 例如阿里云
部署wordpress
详见下一篇部署bitnami下的服务
部署IngressRoute
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: example-com
spec:
entryPoints:
- web
routes:
- match: Host(`test.example.com`)
kind: Rule
services:
- name: wordpress
port: 80