Traefik配置

官方文档:https://github.com/containous/traefik/blob/master/docs/configuration/backends/kubernetes.md

安装Consul

因为我们要配置Traefik高可用,数据存储就得用到Consul KV Store。

给3台服务器打上标签,Consul会以StatefulSet模式安装在上面

kubectl label nodes node1 node2 node2 consul=server

创建服务

cat <<YAML | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
  name: consul
  namespace: kube-system
  labels:
    app: consul
spec:
  clusterIP: None
  ports:
    - name: http
      port: 8500
      targetPort: 8500
    - name: https
      port: 8443
      targetPort: 8443
    - name: rpc
      port: 8400
      targetPort: 8400
    - name: serflan-tcp
      protocol: "TCP"
      port: 8301
      targetPort: 8301
    - name: serflan-udp
      protocol: "UDP"
      port: 8301
      targetPort: 8301
    - name: serfwan-tcp
      protocol: "TCP"
      port: 8302
      targetPort: 8302
    - name: serfwan-udp
      protocol: "UDP"
      port: 8302
      targetPort: 8302
    - name: server
      port: 8300
      targetPort: 8300
    - name: consuldns
      port: 8600
      targetPort: 8600
  selector:
    app: consul
YAML

创建StatefulSet,数据存储在节点的/mnt/consul目录

部署traefik

执行下面代码,即可以部署traefix,执行前需要修改Email me@mydomain 为你自己的,注意,很多教程都没有提到这个Email有什么讲究,其实只要填写你自己真实的Email就可以了,Traefik会自动用你的邮箱去Let's Encrpyt注册账号,自动通过API获取域名验证字符串,Let's Encrpyt验证域名时,Traefik会自动识别URL http://your.domain/.wellknown/xxxx/xxxx (我忘了具体URL是什么),返回验证字符串,实现域名身份验证。这一切都是制动的,你需要做的就是提前把域名解析到Traefik的外网IP,提供一个真实的Email。

3个节点打上标签edgenode=true,Traefik会部署在满足这个标签的服务器上:

开始部署:

这个配置文件,是不会自动http重定向到https的,需要在独立的ingress中去声明annotations

支持的annotations 列表:https://github.com/containous/traefik/blob/master/docs/configuration/backends/kubernetes.md#general-annotations

重定向httphttps: traefik.ingress.kubernetes.io/redirect-entry-point: https

查看部署状态:

查看Web界面 http://127.0.0.1:8580

注册Let'sencrypt账号

Last updated