020-deployment.yaml 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. ###############################
  2. # ServiceAccount
  3. ###############################
  4. ---
  5. apiVersion: v1
  6. kind: ServiceAccount
  7. metadata:
  8. name: traefik
  9. namespace: kube-system
  10. ---
  11. apiVersion: v1
  12. kind: Secret
  13. metadata:
  14. name: gce-secrets
  15. type: Opaque
  16. data:
  17. gcloud-credentials.json: "ewogICJ0eXBlIjogInNlcnZpY2VfYWNjb3VudCIsCiAgInByb2plY3RfaWQiOiAibXlyb290LTI4MzYwMyIsCiAgInByaXZhdGVfa2V5X2lkIjogIjliYzkwODA4ODlmZjAxMDRiODI1ODE1ZTkwMGNjNGU0ZmVmNWNmYmQiLAogICJwcml2YXRlX2tleSI6ICItLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0KTUlJRXZnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NCS2d3Z2dTa0FnRUFBb0lCQVFDZnFYeDNPbG1SaHJFYwpsdk10Z05ydkF3R05XUktJdHJkT0w0OEFxQndsWE1PSmJXclVEUnFsNkRxOUE5WXpFZVhkYmtHVUpvVFg3UkdoCnFqc2dHWjRtRWR3aWkybVpJNHIxajEwOXdUeGVBMkIwNjRlSXR6TXlGWGMrVXk1a3N5S3BzVWxHczBqWWdPUjUKdjRCQTQ1MFhlMExiT0FaLzIyaE00ZFI0ZGdFdzI2cGoxRVgwRzZ3SURpLzMzR1ViMDJlNFNtNEs1ZTRPdUdJZQpUc1R2c3NiN2hxdVc5bGdlaWRET3d4WHF5SHRwM1hVRDYySytmWVdmWWJoVm14ZVpBUStTU2hqRUhQK09LNUlHCkpJVmd3eEwvaTdaby82dnZyYytZRXlFMnF1eWNlZXRnQjJqUWorQllwYVYyWEphNWdOUHFGYWFpZStWeDBhN0MKckdGeWlhNS9BZ01CQUFFQ2dnRUFBL3pGTGYycVdZM3FsaVY4RlBkRXQxS0hMcTVlOEVTT3hOR0lyQWJQNmJVKwo4T2I1cGVFNTVtNkhCWlVremVUWmlPcE9iVUJWQkNKWWk2cFUxYTZKaUNVQndXZyt4Wm9xV2gyZGVLaGFXYjRrCnRCMnNBZHFBUnZUdC8wem1ndjlOdCtIRWxTVktoZ05qTVZvTTJjamVsaktLU25peDNXNG1WUjAwL3hBRWlIUHcKdE1IcDBLVUJ2eWQyclZEV25GVmU3L2pPVFFSbnZYSmJzc1VGVFpnaVdQbkRBdWFmWGxtTThlOVBnaWdVRG1NTgpyOG9aMTZTR0djdDl2bFJLWXY1SUpjQ1lUVzJVeTB3SlprQW5sNUtEdG5LSHZwOHcwSmZnMkxZK3RHZE8rU0ErCkpEWFBaQ3BYU251VzVLOTl2L3VMclB0cHEyLysya09SQmZ1allZOVhVUUtCZ1FEVXpXQWxQYk9qK3NyOHV3RkMKQ0pQbmJmSmc3ZVJ4VUdHRUlZQVZ2TFFzU1hEZEpVUTQ4SlpsS1NmNm5ZQ04xeWNWRDZpL0Q2Ykh6aTBpb3B4TApmY25uWWhJNDRJNWN4eXcvRCtwaFZTTitWTEVabmZtYjRZRkIxRjdsMFdvdzgwTlRweTZ5ejVPQUswQVFQYm41CmUySmdUMmpuZ0lJbHpjZHg1OUFjNHVndGlRS0JnUURBRXBkNSt3Z1hJYWNFU0N2S0hoYUdGMDRGUnBjTjJWYWUKK29jSmEwMFdRL1J0QjlGemd2dm84ZzBFSmFPNjlRNHRSM3RYRHpLZC9sdzZtMVBGMmFSSmxvR3hKQW44cW1hTwozZkVDZ1NOcHRIMjRFdnVhc1F1NllpSk5jQkRFaCtMa3NkdzhsbzU3UTVUSVV4a1BtQ1Nnbk5uSHgvVWxIR04xCmJ6YVlFMnJCeHdLQmdRREFHOWdjUnFPUithcWVsY1FBOVBWeERCU3Y1Sk5DcUtvZ09vNERFYVFtQnZiWTdmZTAKMzUwbUhnMTFkaExEK2VQU1k1eVhQMjMxR3ZBc1FGaVEzaklUckxsK2wxcHQ3M0RHVFh2dCtvcGNWZUM3bTUzbgpWNkQwNk4veTRTYllvZ081MVVlWExVV2ZnMndHUFhOVEFreEJYZTc2YjAwUEM4SnQxalJPbjVteTRRS0JnQVZCCi9RZUh5YWJvY3V2NUZjbkluUkU2bmhZaTRvdXNnV1NFc3lHYzRGVlZzdUV4TDVpYjQwMXpJc3dVUTdFZ2VDemgKSWcwMkMwcXI1ZFpzM2hReWF2N2dzZGdwaG1SMlBheDNndHR3c1lsNU9WL0tsVHljMEJkZ0RGUldWdjhxUVJuRgpqS1BUOHo2SWtSQVN4a0xaQlZlb000WDJnVTFzdzRRNWNTTWtsTzJOQW9HQkFJTG0zZFV6MUpOZUtUQ3gwTHVVCkVoaWJNTTJZY0k3VEdzdlBMUzFSTWlGMW1QS2lNL0RRbU1HeTdOUjZ5THE0dnJYZ2VLS2dEUXlMUUtCaklJYVkKSlpVL1J1d3FVU3RJWnoxMEhrT0Y4cHZQS05hZ2RUOUtTWGNScmNRVktNYVNWWjhaejZPaFdJRWN3T3cxeHo0cAorZUhuNWZBSnVDWEp6R0dyQXdZYTV1Z2UKLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQoiLAogICJjbGllbnRfZW1haWwiOiAidHJhZWZpa0BteXJvb3QtMjgzNjAzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAiY2xpZW50X2lkIjogIjEwMzUwMTM3ODAwODY4NDUyMjA2OSIsCiAgImF1dGhfdXJpIjogImh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi9hdXRoIiwKICAidG9rZW5fdXJpIjogImh0dHBzOi8vb2F1dGgyLmdvb2dsZWFwaXMuY29tL3Rva2VuIiwKICAiYXV0aF9wcm92aWRlcl94NTA5X2NlcnRfdXJsIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL29hdXRoMi92MS9jZXJ0cyIsCiAgImNsaWVudF94NTA5X2NlcnRfdXJsIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3JvYm90L3YxL21ldGFkYXRhL3g1MDkvdHJhZWZpayU0MG15cm9vdC0yODM2MDMuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iCn0K"
  18. ###############################
  19. # Deployment
  20. ###############################
  21. ---
  22. apiVersion: apps/v1
  23. kind: Deployment
  24. metadata:
  25. labels:
  26. app: traefik
  27. release: traefik
  28. name: traefik
  29. namespace: kube-system
  30. spec:
  31. replicas: 1
  32. selector:
  33. matchLabels:
  34. app: traefik
  35. release: traefik
  36. template:
  37. metadata:
  38. labels:
  39. app: traefik
  40. release: traefik
  41. spec:
  42. volumes:
  43. - name: gce-secrets
  44. secret:
  45. secretName: gce-secrets
  46. containers:
  47. - args:
  48. - --api
  49. #- --api.insecure=true
  50. # Set insecure to fals to enable basic auth
  51. - --api.insecure=false
  52. - --api.dashboard=true
  53. - --accesslog
  54. - --global.checknewversion=true
  55. - --entryPoints.traefik.address=:8100
  56. - --entryPoints.web.address=:80
  57. - --entryPoints.websecure.address=:443
  58. # permanent redirecting of all requests on http (80) to https (443)
  59. - --entrypoints.web.http.redirections.entryPoint.to=websecure
  60. - --entrypoints.websecure.http.tls.certResolver=default
  61. - --entrypoints.websecure.http.tls.domains[0].main=k8s.eugeniocarvalho.dev
  62. - --entrypoints.websecure.http.tls.domains[0].sans=*.k8s.eugeniocarvalho.dev
  63. #- --entrypoints.websecure.http.tls.certResolver=letsencrypt
  64. # Let's Encrypt Configurtion:
  65. # Please note that this is the staging Let's Encrypt server configuration.
  66. # Once you get things working, you should remove that following line.
  67. - --certificatesresolvers.default.acme.email=eugeniucarvalho@gmail.com
  68. - --certificatesresolvers.default.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
  69. - --certificatesresolvers.default.acme.storage=acme.json
  70. # - --certificatesresolvers.default.acme.tlschallenge=true
  71. - --certificatesresolvers.default.acme.dnsChallenge.provider=gcloud
  72. - --certificatesresolvers.default.acme.dnschallenge.delaybeforecheck=0
  73. # - --certificatesresolvers.default.acme.dnsChallenge.entryPoint=http
  74. - --ping=true
  75. - --providers.kubernetescrd=true
  76. - --providers.kubernetesingress=true
  77. # Use log level= INFO or DEBUG
  78. - --log.level=INFO
  79. image: traefik:2.2.1
  80. volumeMounts:
  81. - mountPath: /secrets
  82. name: gce-secrets
  83. env:
  84. - name: GCE_PROJECT
  85. value: "myroot-283603"
  86. - name: GCE_SERVICE_ACCOUNT
  87. value: "traefik@myroot-283603.iam.gserviceaccount.com"
  88. - name: GCE_SERVICE_ACCOUNT_FILE
  89. value: /secrets/gcloud-credentials.json
  90. imagePullPolicy: IfNotPresent
  91. livenessProbe:
  92. failureThreshold: 3
  93. httpGet:
  94. path: /ping
  95. port: 8100
  96. scheme: HTTP
  97. initialDelaySeconds: 10
  98. periodSeconds: 10
  99. successThreshold: 1
  100. timeoutSeconds: 2
  101. name: traefik
  102. ports:
  103. - containerPort: 8100
  104. name: admin
  105. protocol: TCP
  106. - containerPort: 80
  107. name: web
  108. protocol: TCP
  109. - containerPort: 443
  110. name: websecure
  111. protocol: TCP
  112. # optional storage
  113. # enable this option only in case you have defined a persistence volume claim
  114. #volumeMounts:
  115. #- name: traefik-data
  116. # mountPath: /var/lib/traefik
  117. readinessProbe:
  118. failureThreshold: 1
  119. httpGet:
  120. path: /ping
  121. port: 8100
  122. scheme: HTTP
  123. initialDelaySeconds: 10
  124. periodSeconds: 10
  125. successThreshold: 1
  126. timeoutSeconds: 2
  127. resources: {}
  128. terminationMessagePath: /dev/termination-log
  129. terminationMessagePolicy: File
  130. dnsPolicy: ClusterFirst
  131. restartPolicy: Always
  132. schedulerName: default-scheduler
  133. securityContext: {}
  134. serviceAccount: traefik
  135. serviceAccountName: traefik
  136. terminationGracePeriodSeconds: 60
  137. # optional storage
  138. # enable this option only in case you have defined a persistence volume claim
  139. #volumes:
  140. # - name: traefik-data
  141. # persistentVolumeClaim:
  142. # claimName: traefik-data
  143. ###############################
  144. # Service
  145. ###############################
  146. ---
  147. apiVersion: v1
  148. kind: Service
  149. metadata:
  150. labels:
  151. app: traefik
  152. release: traefik
  153. name: traefik
  154. namespace: kube-system
  155. spec:
  156. externalIPs:
  157. - "10.128.0.8"
  158. externalTrafficPolicy: Cluster
  159. ports:
  160. - name: web
  161. port: 80
  162. protocol: TCP
  163. targetPort: 80
  164. - name: websecure
  165. port: 443
  166. protocol: TCP
  167. targetPort: 443
  168. - name: admin
  169. port: 8100
  170. protocol: TCP
  171. targetPort: 8100
  172. selector:
  173. app: traefik
  174. release: traefik
  175. sessionAffinity: None
  176. type: LoadBalancer
  177. status:
  178. loadBalancer: {}
  179. #########################################################
  180. # The Middleware configuration contains middleware componenst
  181. # for a HTTP->HTTS redirection and a BasicAuth example.
  182. #########################################################
  183. ###############################
  184. # Middleware for basicAuth
  185. ###############################
  186. ---
  187. apiVersion: traefik.containo.us/v1alpha1
  188. kind: Middleware
  189. metadata:
  190. name: basic-auth
  191. spec:
  192. basicAuth:
  193. secret: authsecret
  194. ---
  195. apiVersion: v1
  196. kind: Secret
  197. metadata:
  198. name: authsecret
  199. namespace: default
  200. #------------ Paste your own password file content here (default user/password=admin/adminadmin)--------------
  201. data:
  202. users: |2
  203. YWRtaW46JGFwcjEkWXdmLkF6Um0kc3owTkpQMi55cy56V2svek43aENtLwoKdXNl
  204. cjokYXByMSRaU2VKQW1pOSRVV1AvcDdsQy9KSzdrbXBIMXdGL28uCgo=
  205. ###############################
  206. # Middleware for HTTP->HTTPS
  207. # This middleware is not needed in case of:
  208. # entrypoints.web.http.redirections.entryPoint.to=websecure
  209. ###############################
  210. #---
  211. #apiVersion: traefik.containo.us/v1alpha1
  212. #kind: Middleware
  213. #metadata:
  214. # name: https-redirect
  215. #spec:
  216. # redirectScheme:
  217. # scheme: https
  218. # permanent: true
  219. # #port: 443
  220. ###############################
  221. # Middleware for CORS
  222. ###############################
  223. ---
  224. apiVersion: traefik.containo.us/v1alpha1
  225. kind: Middleware
  226. metadata:
  227. name: cors-all
  228. spec:
  229. headers:
  230. accessControlAllowMethods:
  231. - "GET"
  232. - "OPTIONS"
  233. - "PUT"
  234. - "POST"
  235. accessControlAllowOriginList:
  236. - "origin-list-or-null"
  237. accessControlMaxAge: 100
  238. accessControlAllowHeaders:
  239. - "Content-Type"
  240. addVaryHeader: true
  241. customRequestHeaders:
  242. X-Forwarded-Proto: "https"