生產環境的部署大多采用F5+ Traefik這種方式,因為Traefik的SSL方式相對來說比較慢,因此SSL更多的在F5上開放,而F5到Traefik之間以及后端都是http方式。
但客戶需要在開發和測試環境直接用SSL,因此需要配置。
遇到一些小坑,記錄一下理解
- 先生成一個secret,記住別搞個一年就過期的啊。
openssl req \ -newkey rsa:2048 -nodes -keyout tls.key \ -x509 -days 3650 -out tls.crt
- 創建secret
kubectl create secret generic traefik-cert \ --from-file=tls.crt \ --from-file=tls.key -n kube-system
- 創建configmap,此處有坑,/ssl/tls.crt等路徑不是我們本地的路徑,而是在容器內路徑,所以不要去修改!
# traefik.toml defaultEntryPoints = ["http","https"] [entryPoints] [entryPoints.http] address = ":80" [entryPoints.http.redirect] entryPoint = "https" [entryPoints.https] address = ":443" [entryPoints.https.tls] [[entryPoints.https.tls.certificates]] CertFile = "/ssl/tls.crt" KeyFile = "/ssl/tls.key"
如果需要同時打開80和443,需要如下配置文件
# traefik.toml defaultEntryPoints = ["http","https"] [entryPoints] [entryPoints.http] address = ":80" [entryPoints.https] address = ":443" [entryPoints.https.tls] [[entryPoints.https.tls.certificates]] CertFile = "/ssl/tls.crt" KeyFile = "/ssl/tls.key"
建立起來
kubectl create configmap traefik-conf --from-file=traefik.toml -n kube-system
- traefik.yaml文件
隨便找了段貼上去啊,看詳細日志打開
logLevel=DEBUG
apiVersion: v1 kind: Deployment apiVersion: extensions/v1beta1 metadata: name: traefik-ingress-controller namespace: kube-system labels: k8s-app: traefik-ingress-lb spec: replicas: 2 selector: matchLabels: k8s-app: traefik-ingress-lb template: metadata: labels: k8s-app: traefik-ingress-lb name: traefik-ingress-lb spec: terminationGracePeriodSeconds: 60 volumes: - name: ssl secret: secretName: traefik-cert - name: config configMap: name: traefik-conf hostNetwork: true containers: - image: registry.yourcompany.com/traefik:v1.1.1 name: traefik-ingress-lb volumeMounts: - mountPath: "/ssl" name: "ssl" - mountPath: "/config" name: "config" resources: limits: cpu: 200m memory: 30Mi requests: cpu: 100m memory: 20Mi ports: - name: http containerPort: 80 hostPort: 80 - name: https containerPort: 443 hostPort: 443 - name: admin containerPort: 9002 args: - --configfile=/config/traefik.toml - --web - --kubernetes - --logLevel=DEBUG
此處的坑是/config/traefik.toml是容器內地址,不是宿主機的路徑,不要手賤去修改!
- 測試
可以在瀏覽器上直接測試,也可以用命令行。
curl -k https://...