helmchartconfig.yaml 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. apiVersion: helm.cattle.io/v1
  2. kind: HelmChartConfig
  3. metadata:
  4. name: traefik
  5. namespace: kube-system
  6. spec:
  7. valuesContent: |-
  8. additionalArguments:
  9. - "--entrypoints.websecure.proxyProtocol.trustedIPs=127.0.0.1/32,172.16.69.0/24"
  10. - "--entrypoints.web.http.redirections.entryPoint.to=:443"
  11. - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
  12. - "--entrypoints.websecure.transport.respondingTimeouts.readTimeout=0s"
  13. # Auto cert renewal via cloudflare
  14. - "--certificatesresolvers.letsencrypt.acme.email=joshbicking@comcast.net"
  15. - "--certificatesresolvers.letsencrypt.acme.storage=/data/acme.json"
  16. - "--certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare"
  17. - "--certificatesresolvers.letsencrypt.acme.dnschallenge.resolvers=1.1.1.1:53,8.8.8.8:53"
  18. - "--entrypoints.websecure.http.tls.certResolver=letsencrypt"
  19. # Main
  20. - "--entrypoints.websecure.http.tls.domains[0].main=jibby.org"
  21. - "--entrypoints.websecure.http.tls.domains[0].sans=*.jibby.org"
  22. # LAN-only
  23. - "--entrypoints.websecure.http.tls.domains[1].main=lan.jibby.org"
  24. - "--entrypoints.websecure.http.tls.domains[1].sans=*.lan.jibby.org"
  25. # Configuration for extra routers
  26. - "--providers.file.directory=/config"
  27. #- "--log.level=INFO"
  28. # debug, uncomment for testing
  29. #- "--log.level=DEBUG"
  30. #- "--certificatesresolvers.letsencrypt.acme.caServer=https://acme-staging-v02.api.letsencrypt.org/directory"
  31. volumes:
  32. - name: traefik-config
  33. mountPath: "/config"
  34. type: configMap
  35. ports:
  36. gogsssh:
  37. port: 2222
  38. expose:
  39. default: true
  40. exposedPort: 2222
  41. protocol: TCP
  42. env:
  43. - name: CLOUDFLARE_EMAIL
  44. valueFrom:
  45. secretKeyRef:
  46. name: cloudflare-secrets
  47. key: email
  48. optional: false
  49. - name: CLOUDFLARE_API_KEY
  50. valueFrom:
  51. secretKeyRef:
  52. name: cloudflare-secrets
  53. key: api-key
  54. optional: false
  55. # TODO can this be something with ReadWriteMany?
  56. persistence:
  57. enabled: true
  58. storageClass: ceph-block-ssd
  59. metrics:
  60. prometheus:
  61. addServicesLabels: true
  62. logs:
  63. access:
  64. enabled: true
  65. ingressRoute:
  66. dashboard:
  67. enabled: true
  68. matchRule: Host(`traefik.lan.jibby.org`)
  69. entryPoints: ["websecure"]
  70. middlewares:
  71. - name: lanonly
  72. namespace: kube-system
  73. - name: traefik-dash-auth
  74. namespace: kube-system
  75. # Fix for acme.json file being changed to 660 from 600
  76. # This can manifest as the incredibly unhelpful "the router <router name> uses a non-existent resolver: <resolver name>"
  77. # https://github.com/traefik/traefik/issues/10241
  78. podSecurityContext:
  79. fsGroup: 65532
  80. deployment:
  81. initContainers:
  82. # The "volume-permissions" init container is required if you run into permission issues.
  83. # Related issue: https://github.com/traefik/traefik-helm-chart/issues/396
  84. - name: volume-permissions
  85. image: busybox:latest
  86. command: ["sh", "-c", "touch /data/acme.json; chmod -v 600 /data/acme.json"]
  87. securityContext:
  88. runAsNonRoot: true
  89. runAsGroup: 65532
  90. runAsUser: 65532
  91. volumeMounts:
  92. - name: data
  93. mountPath: /data
  94. podAnnotations:
  95. backup.velero.io/backup-volumes-excludes: data
  96. # ACME functionality is not supported when running Traefik as a DaemonSet
  97. #deployment:
  98. # kind: DaemonSet
  99. service:
  100. spec:
  101. # Required to show real IP to proxied services
  102. externalTrafficPolicy: Local
  103. providers:
  104. kubernetesCRD:
  105. # Allows IngressRoutes to use middleware from a different namespace
  106. allowCrossNamespace: true
  107. # pin pod to cluster-ingress node, so ServiceLB gives it the right external IP
  108. affinity:
  109. nodeAffinity:
  110. requiredDuringSchedulingIgnoredDuringExecution:
  111. nodeSelectorTerms:
  112. - matchExpressions:
  113. - key: cluster-ingress
  114. operator: In
  115. values:
  116. - "true"