traefik 配置https协议

1. https证书申请

如提供了安全的https协议 可直接使用,如未提供 则需要手动生成

  1. mkdir /etc/kubernetes/ssl
  2. cd /etc/kubernetes/ssl/
  3. openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=47.94.215.234"

参数说明:

  • -days 证书有效天数
  • -subj “/CN=47.94.215.234” 使用https的域名 这里可以指定某一网端,或者ip,因为没有域名先使用公网ip进行创建证书

2. 创建secrets

  1. # 创建
  2. kubectl create secret generic ssl --from-file=tls.crt --from-file=tls.key -n kube-system
  3. # 更新
  4. kubectl -n kube-system create secret tls tls-rancher-ingress --cert=./tls.crt --key=./tls.key --dry-run -o yaml|kubectl apply -f -

3. 支持https的traefik

3.1 traefik-configmap.yaml

  1. kind: ConfigMap
  2. apiVersion: v1
  3. metadata:
  4. name: traefik-conf
  5. namespace: kube-system
  6. data:
  7. traefik.toml: |
  8. insecureSkipVerify = true
  9. defaultEntryPoints = ["http","https"]
  10. [entryPoints]
  11. [entryPoints.http]
  12. address = ":80"
  13. [entryPoints.https]
  14. address = ":443"
  15. [entryPoints.https.tls]
  16. [[entryPoints.https.tls.certificates]]
  17. CertFile = "/ssl/tls.crt"
  18. KeyFile = "/ssl/tls.key"

3.2 traefik-rbac.yaml

  1. ---
  2. kind: ClusterRole
  3. apiVersion: rbac.authorization.k8s.io/v1beta1
  4. metadata:
  5. name: traefik-ingress-controller
  6. rules:
  7. - apiGroups:
  8. - ""
  9. resources:
  10. - services
  11. - endpoints
  12. - secrets
  13. verbs:
  14. - get
  15. - list
  16. - watch
  17. - apiGroups:
  18. - extensions
  19. resources:
  20. - ingresses
  21. verbs:
  22. - get
  23. - list
  24. - watch
  25. - apiGroups:
  26. - extensions
  27. resources:
  28. - ingresses/status
  29. verbs:
  30. - update
  31. ---
  32. kind: ClusterRoleBinding
  33. apiVersion: rbac.authorization.k8s.io/v1beta1
  34. metadata:
  35. name: traefik-ingress-controller
  36. roleRef:
  37. apiGroup: rbac.authorization.k8s.io
  38. kind: ClusterRole
  39. name: traefik-ingress-controller
  40. subjects:
  41. - kind: ServiceAccount
  42. name: traefik-ingress-controller
  43. namespace: kube-system

3.3 traefik-deployment.yaml

  1. ---
  2. apiVersion: v1
  3. kind: ServiceAccount
  4. metadata:
  5. name: traefik-ingress-controller
  6. namespace: kube-system
  7. ---
  8. kind: Deployment
  9. apiVersion: apps/v1
  10. metadata:
  11. name: traefik-ingress-controller
  12. namespace: kube-system
  13. labels:
  14. k8s-app: traefik-ingress-lb
  15. spec:
  16. replicas: 1
  17. selector:
  18. matchLabels:
  19. k8s-app: traefik-ingress-lb
  20. template:
  21. metadata:
  22. labels:
  23. k8s-app: traefik-ingress-lb
  24. name: traefik-ingress-lb
  25. spec:
  26. serviceAccountName: traefik-ingress-controller
  27. terminationGracePeriodSeconds: 60
  28. containers:
  29. - image: traefik:v1.7
  30. name: traefik-ingress-lb
  31. ports:
  32. - name: http
  33. containerPort: 80
  34. - name: https
  35. containerPort: 443
  36. - name: admin
  37. containerPort: 8080
  38. args:
  39. - -d
  40. - --api
  41. - --kubernetes
  42. - --logLevel=INFO
  43. - --configfile=/config/traefik.toml
  44. volumeMounts:
  45. - mountPath: "/ssl"
  46. name: "ssl"
  47. - mountPath: "/config"
  48. name: "config"
  49. volumes:
  50. - name: ssl
  51. secret:
  52. secretName: ssl
  53. - name: config
  54. configMap:
  55. name: traefik-conf
  56. tolerations:
  57. - key: node-role.kubernetes.io/master
  58. operator: "Equal"
  59. value: ""
  60. effect: NoSchedule
  61. nodeSelector:
  62. node-role.kubernetes.io/master: ""
  63. ---
  64. kind: Service
  65. apiVersion: v1
  66. metadata:
  67. name: traefik-ingress-service
  68. namespace: kube-system
  69. spec:
  70. selector:
  71. k8s-app: traefik-ingress-lb
  72. ports:
  73. - protocol: TCP
  74. port: 80
  75. name: web
  76. nodePort: 31006
  77. - protocol: TCP
  78. port: 8080
  79. name: admin
  80. - protocol: TCP
  81. port: 443
  82. name: https
  83. nodePort: 30443
  84. type: NodePort

3.4 traefik-ingress.yaml

  1. ---
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: traefik-web-ui
  6. namespace: kube-system
  7. spec:
  8. selector:
  9. k8s-app: traefik-ingress-lb
  10. ports:
  11. - name: web
  12. port: 80
  13. targetPort: 8080
  14. ---
  15. apiVersion: extensions/v1beta1
  16. kind: Ingress
  17. metadata:
  18. name: traefik-web-ui
  19. namespace: kube-system
  20. spec:
  21. rules:
  22. - host: traefik-ui.minikube
  23. http:
  24. paths:
  25. - path: /
  26. backend:
  27. serviceName: traefik-web-ui
  28. servicePort: web