traefik.yaml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. ---
  2. apiVersion: apiextensions.k8s.io/v1beta1
  3. kind: CustomResourceDefinition
  4. metadata:
  5. name: ingressroutes.traefik.containo.us
  6. spec:
  7. group: traefik.containo.us
  8. version: v1alpha1
  9. names:
  10. kind: IngressRoute
  11. plural: ingressroutes
  12. singular: ingressroute
  13. scope: Namespaced
  14. ---
  15. apiVersion: apiextensions.k8s.io/v1beta1
  16. kind: CustomResourceDefinition
  17. metadata:
  18. name: ingressroutetcps.traefik.containo.us
  19. spec:
  20. group: traefik.containo.us
  21. version: v1alpha1
  22. names:
  23. kind: IngressRouteTCP
  24. plural: ingressroutetcps
  25. singular: ingressroutetcp
  26. scope: Namespaced
  27. ---
  28. apiVersion: apiextensions.k8s.io/v1beta1
  29. kind: CustomResourceDefinition
  30. metadata:
  31. name: middlewares.traefik.containo.us
  32. spec:
  33. group: traefik.containo.us
  34. version: v1alpha1
  35. names:
  36. kind: Middleware
  37. plural: middlewares
  38. singular: middleware
  39. scope: Namespaced
  40. ---
  41. apiVersion: apiextensions.k8s.io/v1beta1
  42. kind: CustomResourceDefinition
  43. metadata:
  44. name: tlsoptions.traefik.containo.us
  45. spec:
  46. group: traefik.containo.us
  47. version: v1alpha1
  48. names:
  49. kind: TLSOption
  50. plural: tlsoptions
  51. singular: tlsoption
  52. scope: Namespaced
  53. ---
  54. apiVersion: apiextensions.k8s.io/v1beta1
  55. kind: CustomResourceDefinition
  56. metadata:
  57. name: traefikservices.traefik.containo.us
  58. spec:
  59. group: traefik.containo.us
  60. version: v1alpha1
  61. names:
  62. kind: TraefikService
  63. plural: traefikservices
  64. singular: traefikservice
  65. scope: Namespaced
  66. ---
  67. apiVersion: apiextensions.k8s.io/v1beta1
  68. kind: CustomResourceDefinition
  69. metadata:
  70. name: tlsstores.traefik.containo.us
  71. spec:
  72. group: traefik.containo.us
  73. version: v1alpha1
  74. names:
  75. kind: TLSStore
  76. plural: tlsstores
  77. singular: tlsstore
  78. scope: Namespaced
  79. ---
  80. apiVersion: apiextensions.k8s.io/v1beta1
  81. kind: CustomResourceDefinition
  82. metadata:
  83. name: ingressrouteudps.traefik.containo.us
  84. spec:
  85. group: traefik.containo.us
  86. version: v1alpha1
  87. names:
  88. kind: IngressRouteUDP
  89. plural: ingressrouteudps
  90. singular: ingressrouteudp
  91. scope: Namespaced
  92. #RBAC --------------------------------------------
  93. ---
  94. kind: ClusterRole
  95. apiVersion: rbac.authorization.k8s.io/v1beta1
  96. metadata:
  97. name: traefik-ingress-controller
  98. rules:
  99. - apiGroups:
  100. - ""
  101. resources:
  102. - services
  103. - endpoints
  104. - secrets
  105. verbs:
  106. - get
  107. - list
  108. - watch
  109. - apiGroups:
  110. - extensions
  111. resources:
  112. - ingresses
  113. verbs:
  114. - get
  115. - list
  116. - watch
  117. - apiGroups:
  118. - extensions
  119. resources:
  120. - ingresses/status
  121. verbs:
  122. - update
  123. - apiGroups:
  124. - traefik.containo.us
  125. resources:
  126. - middlewares
  127. - ingressroutes
  128. - traefikservices
  129. - ingressroutetcps
  130. - ingressrouteudps #-------------
  131. - tlsoptions
  132. - tlsstores #-------------
  133. verbs:
  134. - get
  135. - list
  136. - watch
  137. ---
  138. kind: ClusterRoleBinding
  139. apiVersion: rbac.authorization.k8s.io/v1beta1
  140. metadata:
  141. name: traefik-ingress-controller
  142. roleRef:
  143. apiGroup: rbac.authorization.k8s.io
  144. kind: ClusterRole
  145. name: traefik-ingress-controller
  146. subjects:
  147. - kind: ServiceAccount
  148. name: traefik
  149. namespace: kube-system
  150. ---
  151. kind: PersistentVolume
  152. apiVersion: v1
  153. metadata:
  154. name: traefik-data
  155. namespace: kube-system
  156. spec:
  157. capacity:
  158. storage: 1Gi
  159. volumeMode: Filesystem
  160. accessModes:
  161. - ReadWriteOnce
  162. claimRef:
  163. namespace: kube-system
  164. name: traefik-data
  165. csi:
  166. driver: driver.longhorn.io
  167. fsType: ext4
  168. volumeHandle: traefik-data
  169. storageClassName: longhorn-durable
  170. ---
  171. apiVersion: v1
  172. kind: PersistentVolumeClaim
  173. metadata:
  174. name: traefik-data
  175. namespace: kube-system
  176. spec:
  177. accessModes:
  178. - ReadWriteOnce
  179. storageClassName: longhorn-durable
  180. resources:
  181. requests:
  182. storage: 1Gi
  183. volumeName: "traefik-data"
  184. #INGRESS --------------------------------------------
  185. ---
  186. #####################################################
  187. # Secure traefik dashboard with https and basic auth
  188. #####################################################
  189. apiVersion: traefik.containo.us/v1alpha1
  190. kind: IngressRoute
  191. metadata:
  192. name: traefik-dashboard
  193. spec:
  194. routes:
  195. - match: Host(`traefik.eugeniocarvalho.dev`)
  196. kind: Rule
  197. services:
  198. - name: api@internal
  199. kind: TraefikService
  200. # optional: add basic auth
  201. #middlewares:
  202. # - name: basic-auth
  203. ###############################
  204. # ServiceAccount
  205. ###############################
  206. ---
  207. apiVersion: v1
  208. kind: ServiceAccount
  209. metadata:
  210. name: traefik
  211. namespace: kube-system
  212. ###############################
  213. # Deployment
  214. ###############################
  215. ---
  216. apiVersion: apps/v1
  217. kind: Deployment
  218. metadata:
  219. labels:
  220. app: traefik
  221. release: traefik
  222. name: traefik
  223. namespace: kube-system
  224. spec:
  225. replicas: 1
  226. selector:
  227. matchLabels:
  228. app: traefik
  229. release: traefik
  230. template:
  231. metadata:
  232. labels:
  233. app: traefik
  234. release: traefik
  235. spec:
  236. containers:
  237. - args:
  238. - --api
  239. - --api.insecure=true
  240. # Set insecure to fals to enable basic auth
  241. #- --api.insecure=false
  242. - --api.dashboard=true
  243. - --accesslog
  244. - --global.checknewversion=true
  245. - --entryPoints.traefik.address=:8100
  246. - --entryPoints.web.address=:80
  247. - --entryPoints.websecure.address=:443
  248. # permanent redirecting of all requests on http (80) to https (443)
  249. - --entrypoints.web.http.redirections.entryPoint.to=websecure
  250. - --entrypoints.websecure.http.tls.certResolver=default
  251. # Let's Encrypt Configurtion:
  252. # Please note that this is the staging Let's Encrypt server configuration.
  253. # Once you get things working, you should remove that following line.
  254. - --certificatesresolvers.default.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
  255. - --certificatesresolvers.default.acme.email=eugeniucarvalho@gmail.com
  256. - --certificatesresolvers.default.acme.storage=/var/lib/traefik/acme.json
  257. - --certificatesresolvers.default.acme.tlschallenge=true
  258. - --ping=true
  259. - --providers.kubernetescrd=true
  260. - --providers.kubernetesingress=true
  261. # Use log level= INFO or DEBUG
  262. - --log.level=INFO
  263. image: traefik:2.2.1
  264. imagePullPolicy: IfNotPresent
  265. livenessProbe:
  266. failureThreshold: 3
  267. httpGet:
  268. path: /ping
  269. port: 8100
  270. scheme: HTTP
  271. initialDelaySeconds: 10
  272. periodSeconds: 10
  273. successThreshold: 1
  274. timeoutSeconds: 2
  275. name: traefik
  276. ports:
  277. - containerPort: 8100
  278. name: admin
  279. protocol: TCP
  280. - containerPort: 80
  281. name: web
  282. protocol: TCP
  283. - containerPort: 443
  284. name: websecure
  285. protocol: TCP
  286. # optional storage
  287. # enable this option only in case you have defined a persistence volume claim
  288. volumeMounts:
  289. - name: traefik-data
  290. mountPath: /var/lib/traefik
  291. readinessProbe:
  292. failureThreshold: 1
  293. httpGet:
  294. path: /ping
  295. port: 8100
  296. scheme: HTTP
  297. initialDelaySeconds: 10
  298. periodSeconds: 10
  299. successThreshold: 1
  300. timeoutSeconds: 2
  301. resources: {}
  302. terminationMessagePath: /dev/termination-log
  303. terminationMessagePolicy: File
  304. dnsPolicy: ClusterFirst
  305. restartPolicy: Always
  306. schedulerName: default-scheduler
  307. securityContext: {}
  308. serviceAccount: traefik
  309. serviceAccountName: traefik
  310. terminationGracePeriodSeconds: 60
  311. # optional storage
  312. # enable this option only in case you have defined a persistence volume claim
  313. volumes:
  314. - name: traefik-data
  315. persistentVolumeClaim:
  316. claimName: traefik-data
  317. ###############################
  318. # Service
  319. ###############################
  320. ---
  321. apiVersion: v1
  322. kind: Service
  323. metadata:
  324. labels:
  325. app: traefik
  326. release: traefik
  327. name: traefik
  328. namespace: kube-system
  329. spec:
  330. externalIPs:
  331. - 10.128.0.8
  332. externalTrafficPolicy: Cluster
  333. ports:
  334. - name: web
  335. port: 80
  336. protocol: TCP
  337. targetPort: 80
  338. - name: websecure
  339. port: 443
  340. protocol: TCP
  341. targetPort: 443
  342. - name: admin
  343. port: 8100
  344. protocol: TCP
  345. targetPort: 8100
  346. selector:
  347. app: traefik
  348. release: traefik
  349. sessionAffinity: None
  350. type: LoadBalancer
  351. status:
  352. loadBalancer: {}
  353. #########################################################
  354. # The Middleware configuration contains middleware componenst
  355. # for a HTTP->HTTS redirection and a BasicAuth example.
  356. #########################################################
  357. ###############################
  358. # Middleware for basicAuth
  359. ###############################
  360. ---
  361. # apiVersion: traefik.containo.us/v1alpha1
  362. # kind: Middleware
  363. # metadata:
  364. # name: basic-auth
  365. # spec:
  366. # basicAuth:
  367. # secret: authsecret
  368. # ---
  369. # apiVersion: v1
  370. # kind: Secret
  371. # metadata:
  372. # name: authsecret
  373. # namespace: default
  374. # #------------ Paste your own password file content here (default user/password=admin/adminadmin)--------------
  375. # data:
  376. # users: |2
  377. # YWRtaW46JGFwcjEkWXdmLkF6Um0kc3owTkpQMi55cy56V2svek43aENtLwoKdXNl
  378. # cjokYXByMSRaU2VKQW1pOSRVV1AvcDdsQy9KSzdrbXBIMXdGL28uCgo=
  379. ###############################
  380. # Middleware for HTTP->HTTPS
  381. # This middleware is not needed in case of:
  382. # entrypoints.web.http.redirections.entryPoint.to=websecure
  383. ###############################
  384. #---
  385. #apiVersion: traefik.containo.us/v1alpha1
  386. #kind: Middleware
  387. #metadata:
  388. # name: https-redirect
  389. #spec:
  390. # redirectScheme:
  391. # scheme: https
  392. # permanent: true
  393. # #port: 443
  394. ###############################
  395. # Middleware for CORS
  396. ###############################
  397. ---
  398. apiVersion: traefik.containo.us/v1alpha1
  399. kind: Middleware
  400. metadata:
  401. name: cors-all
  402. spec:
  403. headers:
  404. accessControlAllowMethods:
  405. - "GET"
  406. - "OPTIONS"
  407. - "PUT"
  408. - "POST"
  409. accessControlAllowOriginList:
  410. - "origin-list-or-null"
  411. accessControlMaxAge: 100
  412. accessControlAllowHeaders:
  413. - "Content-Type"
  414. addVaryHeader: true
  415. customRequestHeaders:
  416. X-Forwarded-Proto: "https"