kubernetes 部署 traefik2.5
零、前言
 本文不涉及Gateway API,因为仍然是实验功能。
 traefik 相关基础知识都在之前的文章写了,本文只关注新装2.5版本,以及在不同k8s版本安装的差异性进行备注
一、系统环境
Traefik版本: 2.5.6Kubernetes版本:1.19
二、helm 安装
2.1 系统环境
Kubernetes1.14+Helm3.x
2.2 安装
添加Traefik chart 仓库
helm repo add traefik https://helm.traefik.io/traefik更新仓库
helm repo update使用helm 安装
helm install traefik traefik/traefik其他个性化配置查看values.yaml
helm安装官方文档
三、手动安装
3.1 创建CRD
 这里要注意你的k8s版本,从k8s 1.16开始废弃apiextensions.k8s.io/v1beta1,1.22完全删除。
 对于k8s 1.16 以上版本,使用apiextensions.k8s.io/v1
00-traefik-v2.5-crd.yaml
---
apiVersionapiextensions.k8s.io/v1
kindCustomResourceDefinition
metadata
  annotations
    controller-gen.kubebuilder.io/versionv0.6.2
  creationTimestampnull
  nameingressroutes.traefik.containo.us
spec
  grouptraefik.containo.us
  names
    kindIngressRoute
    listKindIngressRouteList
    pluralingressroutes
    singularingressroute
  scopeNamespaced
  versions
namev1alpha1
    schema
      openAPIV3Schema
        descriptionIngressRoute is an Ingress CRD specification.
        properties
          apiVersion
            description'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            typestring
          kind
            description'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            typestring
          metadata
            typeobject
          spec
            descriptionIngressRouteSpec is a specification for a IngressRouteSpec
              resource.
            properties
              entryPoints
                items
                  typestring
                typearray
              routes
                items
                  descriptionRoute contains the set of routes.
                  properties
                    kind
                      enum
Rule
                      typestring
                    match
                      typestring
                    middlewares
                      items
                        descriptionMiddlewareRef is a ref to the Middleware resources.
                        properties
                          name
                            typestring
                          namespace
                            typestring
                        required
name
                        typeobject
                      typearray
                    priority
                      typeinteger
                    services
                      items
                        descriptionService defines an upstream to proxy traffic.
                        properties
                          kind
                            enum
Service
TraefikService
                            typestring
                          name
                            descriptionName is a reference to a Kubernetes Service
                              object (for a load-balancer of servers), or to a TraefikService
                              object (service load-balancer, mirroring, etc). The
                              differentiation between the two is specified in the
                              Kind field.
                            typestring
                          namespace
                            typestring
                          passHostHeader
                            typeboolean
                          port
                            anyOf
typeinteger
typestring
                            x-kubernetes-int-or-stringtrue
                          responseForwarding
                            descriptionResponseForwarding holds configuration for
                              the forward of the response.
                            properties
                              flushInterval
                                typestring
                            typeobject
                          scheme
                            typestring
                          serversTransport
                            typestring
                          sticky
                            descriptionSticky holds the sticky configuration.
                            properties
                              cookie
                                descriptionCookie holds the sticky configuration
                                  based on cookie.
                                properties
                                  httpOnly
                                    typeboolean
                                  name
                                    typestring
                                  sameSite
                                    typestring
                                  secure
                                    typeboolean
                                typeobject
                            typeobject
                          strategy
                            typestring
                          weight
                            descriptionWeight should only be specified when Name
                              references a TraefikService object (and to be precise,
                              one that embeds a Weighted Round Robin).
                            typeinteger
                        required
name
                        typeobject
                      typearray
                  required
kind
match
                  typeobject
                typearray
              tls
                description"TLS contains the TLS certificates configuration of the
                  routes. To enable Let's Encrypt, use an empty TLS struct, e.g. in
                  YAML\n \t tls # inline format \n \t tls: \t   secretName:
                  # block format"
                properties
                  certResolver
                    typestring
                  domains
                    items
                      descriptionDomain holds a domain name with SANs.
                      properties
                        main
                          typestring
                        sans
                          items
                            typestring
                          typearray
                      typeobject
                    typearray
                  options
                    descriptionOptions is a reference to a TLSOption, that specifies
                      the parameters of the TLS connection.
                    properties
                      name
                        typestring
                      namespace
                        typestring
                    required
name
                    typeobject
                  secretName
                    descriptionSecretName is the name of the referenced Kubernetes
                      Secret to specify the certificate details.
                    typestring
                  store
                    descriptionStore is a reference to a TLSStore, that specifies
                      the parameters of the TLS store.
                    properties
                      name
                        typestring
                      namespace
                        typestring
                    required
name
                    typeobject
                typeobject
            required
routes
            typeobject
        required
metadata
spec
        typeobject
    servedtrue
    storagetrue
status
  acceptedNames
    kind""
    plural""
  conditions
  storedVersions
---
apiVersionapiextensions.k8s.io/v1
kindCustomResourceDefinition
metadata
  annotations
    controller-gen.kubebuilder.io/versionv0.6.2
  creationTimestampnull
  nameingressroutetcps.traefik.containo.us
spec
  grouptraefik.containo.us
  names
    kindIngressRouteTCP
    listKindIngressRouteTCPList
    pluralingressroutetcps
    singularingressroutetcp
  scopeNamespaced
  versions
namev1alpha1
    schema
      openAPIV3Schema
        descriptionIngressRouteTCP is an Ingress CRD specification.
        properties
          apiVersion
            description'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            typestring
          kind
            description'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            typestring
          metadata
            typeobject
          spec
            descriptionIngressRouteTCPSpec is a specification for a IngressRouteTCPSpec
              resource.
            properties
              entryPoints
                items
                  typestring
                typearray
              routes
                items
                  descriptionRouteTCP contains the set of routes.
                  properties
                    match
                      typestring
                    middlewares
                      descriptionMiddlewares contains references to MiddlewareTCP
                        resources.
                      items
                        descriptionObjectReference is a generic reference to a Traefik
                          resource.
                        properties
                          name
                            typestring
                          namespace
                            typestring
                        required
name
                        typeobject
                      typearray
                    services
                      items
                        descriptionServiceTCP defines an upstream to proxy traffic.
                        properties
                          name
                            typestring
                          namespace
                            typestring
                          port
                            anyOf
typeinteger
typestring
                            x-kubernetes-int-or-stringtrue
                          proxyProtocol
                            descriptionProxyProtocol holds the ProxyProtocol configuration.
                            properties
                              version
                                typeinteger
                            typeobject
                          terminationDelay
                            typeinteger
                          weight
                            typeinteger
                        required
name
port
                        typeobject
                      typearray
                  required
match
                  typeobject
                typearray
              tls
                description"TLSTCP contains the TLS certificates configuration of
                  the routes. To enable Let's Encrypt, use an empty TLS struct, e.g.
                  in YAML\n \t tls # inline format \n \t tls: \t   secretName:
                  # block format"
                properties
                  certResolver
                    typestring
                  domains
                    items
                      descriptionDomain holds a domain name with SANs.
                      properties
                        main
                          typestring
                        sans
                          items
                            typestring
                          typearray
                      typeobject
                    typearray
                  options
                    descriptionOptions is a reference to a TLSOption, that specifies
                      the parameters of the TLS connection.
                    properties
                      name
                        typestring
                      namespace
                        typestring
                    required
name
                    typeobject
                  passthrough
                    typeboolean
                  secretName
                    descriptionSecretName is the name of the referenced Kubernetes
                      Secret to specify the certificate details.
                    typestring
                  store
                    descriptionStore is a reference to a TLSStore, that specifies
                      the parameters of the TLS store.
                    properties
                      name
                        typestring
                      namespace
                        typestring
                    required
name
                    typeobject
                typeobject
            required
routes
            typeobject
        required
metadata
spec
        typeobject
    servedtrue
    storagetrue
status
  acceptedNames
    kind""
    plural""
  conditions
  storedVersions
---
apiVersionapiextensions.k8s.io/v1
kindCustomResourceDefinition
metadata
  annotations
    controller-gen.kubebuilder.io/versionv0.6.2
  creationTimestampnull
  nameingressrouteudps.traefik.containo.us
spec
  grouptraefik.containo.us
  names
    kindIngressRouteUDP
    listKindIngressRouteUDPList
    pluralingressrouteudps
    singularingressrouteudp
  scopeNamespaced
  versions
namev1alpha1
    schema
      openAPIV3Schema
        descriptionIngressRouteUDP is an Ingress CRD specification.
        properties
          apiVersion
            description'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            typestring
          kind
            description'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            typestring
          metadata
            typeobject
          spec
            descriptionIngressRouteUDPSpec is a specification for a IngressRouteUDPSpec
              resource.
            properties
              entryPoints
                items
                  typestring
                typearray
              routes
                items
                  descriptionRouteUDP contains the set of routes.
                  properties
                    services
                      items
                        descriptionServiceUDP defines an upstream to proxy traffic.
                        properties
                          name
                            typestring
                          namespace
                            typestring
                          port
                            anyOf
typeinteger
typestring
                            x-kubernetes-int-or-stringtrue
                          weight
                            typeinteger
                        required
name
port
                        typeobject
                      typearray
                  typeobject
                typearray
            required
routes
            typeobject
        required
metadata
spec
        typeobject
    servedtrue
    storagetrue
status
  acceptedNames
    kind""
    plural""
  conditions
  storedVersions
---
apiVersionapiextensions.k8s.io/v1
kindCustomResourceDefinition
metadata
  annotations
    controller-gen.kubebuilder.io/versionv0.6.2
  creationTimestampnull
  namemiddlewares.traefik.containo.us
spec
  grouptraefik.containo.us
  names
    kindMiddleware
    listKindMiddlewareList
    pluralmiddlewares
    singularmiddleware
  scopeNamespaced
  versions
namev1alpha1
    schema
      openAPIV3Schema
        descriptionMiddleware is a specification for a Middleware resource.
        properties
          apiVersion
            description'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            typestring
          kind
            description'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            typestring
          metadata
            typeobject
          spec
            descriptionMiddlewareSpec holds the Middleware configuration.
            properties
              addPrefix
                descriptionAddPrefix holds the AddPrefix configuration.
                properties
                  prefix
                    typestring
                typeobject
              basicAuth
                descriptionBasicAuth holds the HTTP basic authentication configuration.
                properties
                  headerField
                    typestring
                  realm
                    typestring
                  removeHeader
                    typeboolean
                  secret
                    typestring
                typeobject
              buffering
                descriptionBuffering holds the request/response buffering configuration.
                properties
                  maxRequestBodyBytes
                    formatint64
                    typeinteger
                  maxResponseBodyBytes
                    formatint64
                    typeinteger
                  memRequestBodyBytes
                    formatint64
                    typeinteger
                  memResponseBodyBytes
                    formatint64
                    typeinteger
                  retryExpression
                    typestring
                typeobject
              chain
                descriptionChain holds a chain of middlewares.
                properties
                  middlewares
                    items
                      descriptionMiddlewareRef is a ref to the Middleware resources.
                      properties
                        name
                          typestring
                        namespace
                          typestring
                      required
name
                      typeobject
                    typearray
                typeobject
              circuitBreaker
                descriptionCircuitBreaker holds the circuit breaker configuration.
                properties
                  expression
                    typestring
                typeobject
              compress
                descriptionCompress holds the compress configuration.
                properties
                  excludedContentTypes
                    items
                      typestring
                    typearray
                typeobject
              contentType
                descriptionContentType middleware - or rather its unique `autoDetect`
                  option - specifies whether to let the `Content-Type` header, if
                  it has not been set by the backend, be automatically set to a value
                  derived from the contents of the response. As a proxy, the default
                  behavior should be to leave the header alone, regardless of what
                  the backend did with it. However, the historic default was to always
                  auto-detect and set the header if it was nil, and it is going to
                  be kept that way in order to support users currently relying on
                  it. This middleware exists to enable the correct behavior until
                  at least the default one can be changed in a future version.
                properties
                  autoDetect
                    typeboolean
                typeobject
              digestAuth
                descriptionDigestAuth holds the Digest HTTP authentication configuration.
                properties
                  headerField
                    typestring
                  realm
                    typestring
                  removeHeader
                    typeboolean
                  secret
                    typestring
                typeobject
              errors
                descriptionErrorPage holds the custom error page configuration.
                properties
                  query
                    typestring
                  service
                    descriptionService defines an upstream to proxy traffic.
                    properties
                      kind
                        enum
Service
TraefikService
                        typestring
                      name
                        descriptionName is a reference to a Kubernetes Service object
                          (for a load-balancer of servers), or to a TraefikService
                          object (service load-balancer, mirroring, etc). The differentiation
                          between the two is specified in the Kind field.
                        typestring
                      namespace
                        typestring
                      passHostHeader
                        typeboolean
                      port
                        anyOf
typeinteger
typestring
                        x-kubernetes-int-or-stringtrue
                      responseForwarding
                        descriptionResponseForwarding holds configuration for the
                          forward of the response.
                        properties
                          flushInterval
                            typestring
                        typeobject
                      scheme
                        typestring
                      serversTransport
                        typestring
                      sticky
                        descriptionSticky holds the sticky configuration.
                        properties
                          cookie
                            descriptionCookie holds the sticky configuration based
                              on cookie.
                            properties
                              httpOnly
                                typeboolean
                              name
                                typestring
                              sameSite
                                typestring
                              secure
                                typeboolean
                            typeobject
                        typeobject
                      strategy
                        typestring
                      weight
                        descriptionWeight should only be specified when Name references
                          a TraefikService object (and to be precise, one that embeds
                          a Weighted Round Robin).
                        typeinteger
                    required
name
                    typeobject
                  status
                    items
                      typestring
                    typearray
                typeobject
              forwardAuth
                descriptionForwardAuth holds the http forward authentication configuration.
                properties
                  address
                    typestring
                  authRequestHeaders
                    items
                      typestring
                    typearray
                  authResponseHeaders
                    items
                      typestring
                    typearray
                  authResponseHeadersRegex
                    typestring
                  tls
                    descriptionClientTLS holds TLS specific configurations as client.
                    properties
                      caOptional
                        typeboolean
                      caSecret
                        typestring
                      certSecret
                        typestring
                      insecureSkipVerify
                        typeboolean
                    typeobject
                  trustForwardHeader
                    typeboolean
                typeobject
              headers
                descriptionHeaders holds the custom header configuration.
                properties
                  accessControlAllowCredentials
                    descriptionAccessControlAllowCredentials is only valid if true.
                      false is ignored.
                    typeboolean
                  accessControlAllowHeaders
                    descriptionAccessControlAllowHeaders must be used in response
                      to a preflight request with Access-Control-Request-Headers set.
                    items
                      typestring
                    typearray
                  accessControlAllowMethods
                    descriptionAccessControlAllowMethods must be used in response
                      to a preflight request with Access-Control-Request-Method set.
                    items
                      typestring
                    typearray
                  accessControlAllowOriginList
                    descriptionAccessControlAllowOriginList is a list of allowable
                      origins. Can also be a wildcard origin "*".
                    items
                      typestring
                    typearray
                  accessControlAllowOriginListRegex
                    descriptionAccessControlAllowOriginListRegex is a list of allowable
                      origins written following the Regular Expression syntax (https://golang.org/pkg/regexp/).
                    items
                      typestring
                    typearray
                  accessControlExposeHeaders
                    descriptionAccessControlExposeHeaders sets valid headers for
                      the response.
                    items
                      typestring
                    typearray
                  accessControlMaxAge
                    descriptionAccessControlMaxAge sets the time that a preflight
                      request may be cached.
                    formatint64
                    typeinteger
                  addVaryHeader
                    descriptionAddVaryHeader controls if the Vary header is automatically
                      added/updated when the AccessControlAllowOriginList is set.
                    typeboolean
                  allowedHosts
                    items
                      typestring
                    typearray
                  browserXssFilter
                    typeboolean
                  contentSecurityPolicy
                    typestring
                  contentTypeNosniff
                    typeboolean
                  customBrowserXSSValue
                    typestring
                  customFrameOptionsValue
                    typestring
                  customRequestHeaders
                    additionalProperties
                      typestring
                    typeobject
                  customResponseHeaders
                    additionalProperties
                      typestring
                    typeobject
                  featurePolicy
                    description'Deprecated: use PermissionsPolicy instead.'
                    typestring
                  forceSTSHeader
                    typeboolean
                  frameDeny
                    typeboolean
                  hostsProxyHeaders
                    items
                      typestring
                    typearray
                  isDevelopment
                    typeboolean
                  permissionsPolicy
                    typestring
                  publicKey
                    typestring
                  referrerPolicy
                    typestring
                  sslForceHost
                    description'Deprecated: use RedirectRegex instead.'
                    typeboolean
                  sslHost
                    description'Deprecated: use RedirectRegex instead.'
                    typestring
                  sslProxyHeaders
                    additionalProperties
                      typestring
                    typeobject
                  sslRedirect
                    description'Deprecated: use EntryPoint redirection or RedirectScheme
                      instead.'
                    typeboolean
                  sslTemporaryRedirect
                    description'Deprecated: use EntryPoint redirection or RedirectScheme
                      instead.'
                    typeboolean
                  stsIncludeSubdomains
                    typeboolean
                  stsPreload
                    typeboolean
                  stsSeconds
                    formatint64
                    typeinteger
                typeobject
              inFlightReq
                descriptionInFlightReq limits the number of requests being processed
                  and served concurrently.
                properties
                  amount
                    formatint64
                    typeinteger
                  sourceCriterion
                    descriptionSourceCriterion defines what criterion is used to
                      group requests as originating from a common source. If none
                      are set, the default is to use the request's remote address
                      field. All fields are mutually exclusive.
                    properties
                      ipStrategy
                        descriptionIPStrategy holds the ip strategy configuration.
                        properties
                          depth
                            typeinteger
                          excludedIPs
                            items
                              typestring
                            typearray
                        typeobject
                      requestHeaderName
                        typestring
                      requestHost
                        typeboolean
                    typeobject
                typeobject
              ipWhiteList
                descriptionIPWhiteList holds the ip white list configuration.
                properties
                  ipStrategy
                    descriptionIPStrategy holds the ip strategy configuration.
                    properties
                      depth
                        typeinteger
                      excludedIPs
                        items
                          typestring
                        typearray
                    typeobject
                  sourceRange
                    items
                      typestring
                    typearray
                typeobject
              passTLSClientCert
                descriptionPassTLSClientCert holds the TLS client cert headers configuration.
                properties
                  info
                    descriptionTLSClientCertificateInfo holds the client TLS certificate
                      info configuration.
                    properties
                      issuer
                        descriptionTLSClientCertificateDNInfo holds the client TLS
                          certificate distinguished name info configuration. cf https://tools.ietf.org/html/rfc3739
                        properties
                          commonName
                            typeboolean
                          country
                            typeboolean
                          domainComponent
                            typeboolean
                          locality
                            typeboolean
                          organization
                            typeboolean
                          province
                            typeboolean
                          serialNumber
                            typeboolean
                        typeobject
                      notAfter
                        typeboolean
                      notBefore
                        typeboolean
                      sans
                        typeboolean
                      serialNumber
                        typeboolean
                      subject
                        descriptionTLSClientCertificateDNInfo holds the client TLS
                          certificate distinguished name info configuration. cf https://tools.ietf.org/html/rfc3739
                        properties
                          commonName
                            typeboolean
                          country
                            typeboolean
                          domainComponent
                            typeboolean
                          locality
                            typeboolean
                          organization
                            typeboolean
                          province
                            typeboolean
                          serialNumber
                            typeboolean
                        typeobject
                    typeobject
                  pem
                    typeboolean
                typeobject
              plugin
                additionalProperties
                  x-kubernetes-preserve-unknown-fieldstrue
                typeobject
              rateLimit
                descriptionRateLimit holds the rate limiting configuration for a
                  given router.
                properties
                  average
                    formatint64
                    typeinteger
                  burst
                    formatint64
                    typeinteger
                  period
                    anyOf
typeinteger
typestring
                    x-kubernetes-int-or-stringtrue
                  sourceCriterion
                    descriptionSourceCriterion defines what criterion is used to
                      group requests as originating from a common source. If none
                      are set, the default is to use the request's remote address
                      field. All fields are mutually exclusive.
                    properties
                      ipStrategy
                        descriptionIPStrategy holds the ip strategy configuration.
                        properties
                          depth
                            typeinteger
                          excludedIPs
                            items
                              typestring
                            typearray
                        typeobject
                      requestHeaderName
                        typestring
                      requestHost
                        typeboolean
                    typeobject
                typeobject
              redirectRegex
                descriptionRedirectRegex holds the redirection configuration.
                properties
                  permanent
                    typeboolean
                  regex
                    typestring
                  replacement
                    typestring
                typeobject
              redirectScheme
                descriptionRedirectScheme holds the scheme redirection configuration.
                properties
                  permanent
                    typeboolean
                  port
                    typestring
                  scheme
                    typestring
                typeobject
              replacePath
                descriptionReplacePath holds the ReplacePath configuration.
                properties
                  path
                    typestring
                typeobject
              replacePathRegex
                descriptionReplacePathRegex holds the ReplacePathRegex configuration.
                properties
                  regex
                    typestring
                  replacement
                    typestring
                typeobject
              retry
                descriptionRetry holds the retry configuration.
                properties
                  attempts
                    typeinteger
                  initialInterval
                    anyOf
typeinteger
typestring
                    x-kubernetes-int-or-stringtrue
                typeobject
              stripPrefix
                descriptionStripPrefix holds the StripPrefix configuration.
                properties
                  forceSlash
                    typeboolean
                  prefixes
                    items
                      typestring
                    typearray
                typeobject
              stripPrefixRegex
                descriptionStripPrefixRegex holds the StripPrefixRegex configuration.
                properties
                  regex
                    items
                      typestring
                    typearray
                typeobject
            typeobject
        required
metadata
spec
        typeobject
    servedtrue
    storagetrue
status
  acceptedNames
    kind""
    plural""
  conditions
  storedVersions
---
apiVersionapiextensions.k8s.io/v1
kindCustomResourceDefinition
metadata
  annotations
    controller-gen.kubebuilder.io/versionv0.6.2
  creationTimestampnull
  namemiddlewaretcps.traefik.containo.us
spec
  grouptraefik.containo.us
  names
    kindMiddlewareTCP
    listKindMiddlewareTCPList
    pluralmiddlewaretcps
    singularmiddlewaretcp
  scopeNamespaced
  versions
namev1alpha1
    schema
      openAPIV3Schema
        descriptionMiddlewareTCP is a specification for a MiddlewareTCP resource.
        properties
          apiVersion
            description'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            typestring
          kind
            description'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            typestring
          metadata
            typeobject
          spec
            descriptionMiddlewareTCPSpec holds the MiddlewareTCP configuration.
            properties
              ipWhiteList
                descriptionTCPIPWhiteList holds the TCP ip white list configuration.
                properties
                  sourceRange
                    items
                      typestring
                    typearray
                typeobject
            typeobject
        required
metadata
spec
        typeobject
    servedtrue
    storagetrue
status
  acceptedNames
    kind""
    plural""
  conditions
  storedVersions
---
apiVersionapiextensions.k8s.io/v1
kindCustomResourceDefinition
metadata
  annotations
    controller-gen.kubebuilder.io/versionv0.6.2
  creationTimestampnull
  nameserverstransports.traefik.containo.us
spec
  grouptraefik.containo.us
  names
    kindServersTransport
    listKindServersTransportList
    pluralserverstransports
    singularserverstransport
  scopeNamespaced
  versions
namev1alpha1
    schema
      openAPIV3Schema
        descriptionServersTransport is a specification for a ServersTransport resource.
        properties
          apiVersion
            description'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            typestring
          kind
            description'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            typestring
          metadata
            typeobject
          spec
            descriptionServersTransportSpec options to configure communication between
              Traefik and the servers.
            properties
              certificatesSecrets
                descriptionCertificates for mTLS.
                items
                  typestring
                typearray
              disableHTTP2
                descriptionDisable HTTP/2 for connections with backend servers.
                typeboolean
              forwardingTimeouts
                descriptionTimeouts for requests forwarded to the backend servers.
                properties
                  dialTimeout
                    anyOf
typeinteger
typestring
                    descriptionThe amount of time to wait until a connection to
                      a backend server can be established. If zero, no timeout exists.
                    x-kubernetes-int-or-stringtrue
                  idleConnTimeout
                    anyOf
typeinteger
typestring
                    descriptionThe maximum period for which an idle HTTP keep-alive
                      connection will remain open before closing itself.
                    x-kubernetes-int-or-stringtrue
                  responseHeaderTimeout
                    anyOf
typeinteger
typestring
                    descriptionThe amount of time to wait for a server's response
                      headers after fully writing the request (including its body,
                      if any). If zero, no timeout exists.
                    x-kubernetes-int-or-stringtrue
                typeobject
              insecureSkipVerify
                descriptionDisable SSL certificate verification.
                typeboolean
              maxIdleConnsPerHost
                descriptionIf non-zero, controls the maximum idle (keep-alive) to
                  keep per-host. If zero, DefaultMaxIdleConnsPerHost is used.
                typeinteger
              peerCertURI
                descriptionURI used to match against SAN URI during the peer certificate
                  verification.
                typestring
              rootCAsSecrets
                descriptionAdd cert file for self-signed certificate.
                items
                  typestring
                typearray
              serverName
                descriptionServerName used to contact the server.
                typestring
            typeobject
        required
metadata
spec
        typeobject
    servedtrue
    storagetrue
status
  acceptedNames
    kind""
    plural""
  conditions
  storedVersions
---
apiVersionapiextensions.k8s.io/v1
kindCustomResourceDefinition
metadata
  annotations
    controller-gen.kubebuilder.io/versionv0.6.2
  creationTimestampnull
  nametlsoptions.traefik.containo.us
spec
  grouptraefik.containo.us
  names
    kindTLSOption
    listKindTLSOptionList
    pluraltlsoptions
    singulartlsoption
  scopeNamespaced
  versions
namev1alpha1
    schema
      openAPIV3Schema
        descriptionTLSOption is a specification for a TLSOption resource.
        properties
          apiVersion
            description'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            typestring
          kind
            description'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            typestring
          metadata
            typeobject
          spec
            descriptionTLSOptionSpec configures TLS for an entry point.
            properties
              alpnProtocols
                items
                  typestring
                typearray
              cipherSuites
                items
                  typestring
                typearray
              clientAuth
                descriptionClientAuth defines the parameters of the client authentication
                  part of the TLS connection, if any.
                properties
                  clientAuthType
                    descriptionClientAuthType defines the client authentication
                      type to apply.
                    enum
NoClientCert
RequestClientCert
RequireAnyClientCert
VerifyClientCertIfGiven
RequireAndVerifyClientCert
                    typestring
                  secretNames
                    descriptionSecretName is the name of the referenced Kubernetes
                      Secret to specify the certificate details.
                    items
                      typestring
                    typearray
                typeobject
              curvePreferences
                items
                  typestring
                typearray
              maxVersion
                typestring
              minVersion
                typestring
              preferServerCipherSuites
                typeboolean
              sniStrict
                typeboolean
            typeobject
        required
metadata
spec
        typeobject
    servedtrue
    storagetrue
status
  acceptedNames
    kind""
    plural""
  conditions
  storedVersions
---
apiVersionapiextensions.k8s.io/v1
kindCustomResourceDefinition
metadata
  annotations
    controller-gen.kubebuilder.io/versionv0.6.2
  creationTimestampnull
  nametlsstores.traefik.containo.us
spec
  grouptraefik.containo.us
  names
    kindTLSStore
    listKindTLSStoreList
    pluraltlsstores
    singulartlsstore
  scopeNamespaced
  versions
namev1alpha1
    schema
      openAPIV3Schema
        descriptionTLSStore is a specification for a TLSStore resource.
        properties
          apiVersion
            description'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            typestring
          kind
            description'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            typestring
          metadata
            typeobject
          spec
            descriptionTLSStoreSpec configures a TLSStore resource.
            properties
              defaultCertificate
                descriptionDefaultCertificate holds a secret name for the TLSOption
                  resource.
                properties
                  secretName
                    descriptionSecretName is the name of the referenced Kubernetes
                      Secret to specify the certificate details.
                    typestring
                required
secretName
                typeobject
            required
defaultCertificate
            typeobject
        required
metadata
spec
        typeobject
    servedtrue
    storagetrue
status
  acceptedNames
    kind""
    plural""
  conditions
  storedVersions
---
apiVersionapiextensions.k8s.io/v1
kindCustomResourceDefinition
metadata
  annotations
    controller-gen.kubebuilder.io/versionv0.6.2
  creationTimestampnull
  nametraefikservices.traefik.containo.us
spec
  grouptraefik.containo.us
  names
    kindTraefikService
    listKindTraefikServiceList
    pluraltraefikservices
    singulartraefikservice
  scopeNamespaced
  versions
namev1alpha1
    schema
      openAPIV3Schema
        descriptionTraefikService is the specification for a service (that an IngressRoute
          refers to) that is usually not a terminal service (i.e. not a pod of servers),
          as opposed to a Kubernetes Service. That is to say, it usually refers to
          other (children) services, which themselves can be TraefikServices or Services.
        properties
          apiVersion
            description'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            typestring
          kind
            description'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More infohttps//git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            typestring
          metadata
            typeobject
          spec
            descriptionServiceSpec defines whether a TraefikService is a load-balancer
              of services or a mirroring service.
            properties
              mirroring
                descriptionMirroring defines a mirroring service, which is composed
                  of a main load-balancer, and a list of mirrors.
                properties
                  kind
                    enum
Service
TraefikService
                    typestring
                  maxBodySize
                    formatint64
                    typeinteger
                  mirrors
                    items
                      descriptionMirrorService defines one of the mirrors of a Mirroring
                        service.
                      properties
                        kind
                          enum
Service
TraefikService
                          typestring
                        name
                          descriptionName is a reference to a Kubernetes Service
                            object (for a load-balancer of servers), or to a TraefikService
                            object (service load-balancer, mirroring, etc). The differentiation
                            between the two is specified in the Kind field.
                          typestring
                        namespace
                          typestring
                        passHostHeader
                          typeboolean
                        percent
                          typeinteger
                        port
                          anyOf
typeinteger
typestring
                          x-kubernetes-int-or-stringtrue
                        responseForwarding
                          descriptionResponseForwarding holds configuration for
                            the forward of the response.
                          properties
                            flushInterval
                              typestring
                          typeobject
                        scheme
                          typestring
                        serversTransport
                          typestring
                        sticky
                          descriptionSticky holds the sticky configuration.
                          properties
                            cookie
                              descriptionCookie holds the sticky configuration based
                                on cookie.
                              properties
                                httpOnly
                                  typeboolean
                                name
                                  typestring
                                sameSite
                                  typestring
                                secure
                                  typeboolean
                              typeobject
                          typeobject
                        strategy
                          typestring
                        weight
                          descriptionWeight should only be specified when Name references
                            a TraefikService object (and to be precise, one that embeds
                            a Weighted Round Robin).
                          typeinteger
                      required
name
                      typeobject
                    typearray
                  name
                    descriptionName is a reference to a Kubernetes Service object
                      (for a load-balancer of servers), or to a TraefikService object
                      (service load-balancer, mirroring, etc). The differentiation
                      between the two is specified in the Kind field.
                    typestring
                  namespace
                    typestring
                  passHostHeader
                    typeboolean
                  port
                    anyOf
typeinteger
typestring
                    x-kubernetes-int-or-stringtrue
                  responseForwarding
                    descriptionResponseForwarding holds configuration for the forward
                      of the response.
                    properties
                      flushInterval
                        typestring
                    typeobject
                  scheme
                    typestring
                  serversTransport
                    typestring
                  sticky
                    descriptionSticky holds the sticky configuration.
                    properties
                      cookie
                        descriptionCookie holds the sticky configuration based on
                          cookie.
                        properties
                          httpOnly
                            typeboolean
                          name
                            typestring
                          sameSite
                            typestring
                          secure
                            typeboolean
                        typeobject
                    typeobject
                  strategy
                    typestring
                  weight
                    descriptionWeight should only be specified when Name references
                      a TraefikService object (and to be precise, one that embeds
                      a Weighted Round Robin).
                    typeinteger
                required
name
                typeobject
              weighted
                descriptionWeightedRoundRobin defines a load-balancer of services.
                properties
                  services
                    items
                      descriptionService defines an upstream to proxy traffic.
                      properties
                        kind
                          enum
Service
TraefikService
                          typestring
                        name
                          descriptionName is a reference to a Kubernetes Service
                            object (for a load-balancer of servers), or to a TraefikService
                            object (service load-balancer, mirroring, etc). The differentiation
                            between the two is specified in the Kind field.
                          typestring
                        namespace
                          typestring
                        passHostHeader
                          typeboolean
                        port
                          anyOf
typeinteger
typestring
                          x-kubernetes-int-or-stringtrue
                        responseForwarding
                          descriptionResponseForwarding holds configuration for
                            the forward of the response.
                          properties
                            flushInterval
                              typestring
                          typeobject
                        scheme
                          typestring
                        serversTransport
                          typestring
                        sticky
                          descriptionSticky holds the sticky configuration.
                          properties
                            cookie
                              descriptionCookie holds the sticky configuration based
                                on cookie.
                              properties
                                httpOnly
                                  typeboolean
                                name
                                  typestring
                                sameSite
                                  typestring
                                secure
                                  typeboolean
                              typeobject
                          typeobject
                        strategy
                          typestring
                        weight
                          descriptionWeight should only be specified when Name references
                            a TraefikService object (and to be precise, one that embeds
                            a Weighted Round Robin).
                          typeinteger
                      required
name
                      typeobject
                    typearray
                  sticky
                    descriptionSticky holds the sticky configuration.
                    properties
                      cookie
                        descriptionCookie holds the sticky configuration based on
                          cookie.
                        properties
                          httpOnly
                            typeboolean
                          name
                            typestring
                          sameSite
                            typestring
                          secure
                            typeboolean
                        typeobject
                    typeobject
                typeobject
            typeobject
        required
metadata
spec
        typeobject
    servedtrue
    storagetrue
status
  acceptedNames
    kind""
    plural""
  conditions
  storedVersionsCRD官方文档
3.2 创建RBAC
 在官方配置的基础上加了namespace kube-system和serviceaccount,这2块配置可以自行设置
01-traefik-v2.5-rbac.yaml
apiVersionrbac.authorization.k8s.io/v1
kindClusterRole
metadata
  nametraefik-ingress-controller
rules
apiGroups
""
    resources
services
endpoints
secrets
    verbs
get
list
watch
apiGroups
extensions
networking.k8s.io
    resources
ingresses
ingressclasses
    verbs
get
list
watch
apiGroups
extensions
    resources
ingresses/status
    verbs
update
apiGroups
traefik.containo.us
    resources
middlewares
middlewaretcps
ingressroutes
traefikservices
ingressroutetcps
ingressrouteudps
tlsoptions
tlsstores
serverstransports
    verbs
get
list
watch
---
apiVersionrbac.authorization.k8s.io/v1
kindClusterRoleBinding
metadata
  nametraefik-ingress-controller
roleRef
  apiGrouprbac.authorization.k8s.io
  kindClusterRole
  nametraefik-ingress-controller
subjects
kindServiceAccount
    nametraefik-ingress-controller
    namespacekube-system
---
apiVersionv1
kindServiceAccount
metadata
  nametraefik-ingress-controller
  namespacekube-systemRBAC官方文档
3.3 创建Traefik 配置文件
 用configmap来配置,常用参数已注释说明
 添加了2个providers,以及ingressclass
02-traefik-v2.5-config-cm.yaml
kindConfigMap
apiVersionv1
metadata
  nametraefik-config
  namespacekube-system
data
  traefik.yaml-
    serversTransport
      insecureSkipVerifytrue  ## Traefik 忽略验证代理服务的 TLS 证书
    api
      insecuretrue            ## 允许 HTTP 方式访问 API
      dashboardtrue           ## 启用 Dashboard
      debugfalse              ## 启用 Debug 调试模式
    metrics
      prometheus## 配置 Prometheus 监控指标数据,并使用默认配置
        entryPointmetrics
    entryPoints
      web
        address":80"          ## 配置 80 端口,并设置入口名称为 web
      websecure
        address":443"         ## 配置 443 端口,并设置入口名称为 websecure
      traefik
        address":8090"        ## 配置 8090 端口,并设置入口名称为 dashboard
      metrics
        address":8082"        ## 配置 8082 端口,作为metrics收集入口
      tcp
        address":8379"        ## 配置 8379 端口,作为tcp访问入口
    providers
      kubernetesCRD## 启用 Kubernetes CRD 方式来配置路由规则
        ingressClasstraefik-gs-v2.5
      kubernetesIngress## 启动 Kubernetes Ingress 方式来配置路由规则
        ingressClasstraefik-gs-v2.5
    log
      filePath"/etc/traefik/logs/traefik.log"              ## 设置调试日志文件存储路径,如果为空则输出到控制台
      levelerror              ## 设置调试日志级别
      format"common"                ## 设置调试日志格式
    accessLog
      filePath"/etc/traefik/logs/access.log"              ## 设置访问日志文件存储路径,如果为空则输出到控制台
      format"common"                ## 设置访问调试日志格式
      bufferingSize0          ## 设置访问日志缓存行数
      filters
        #statusCodes: ["200"]   ## 设置只保留指定状态码范围内的访问日志
        retryAttemptstrue     ## 设置代理访问重试失败时,保留访问日志
        minDuration20         ## 设置保留请求时间超过指定持续时间的访问日志
      fields## 设置访问日志中的字段是否保留(keep 保留、drop 不保留)
        defaultModekeep       ## 设置默认保留访问日志字段
        names## 针对访问日志特别字段特别配置保留模式
          ClientUsernamedrop  
        headers## 设置 Header 中字段是否保留
          defaultModekeep     ## 设置默认保留 Header 中字段
          names## 针对 Header 中特别字段特别配置保留模式
            #User-Agent: redact  ## 可以针对指定agent
            Authorizationdrop
            Content-Typekeep3.4 部署Traefik
 使用Daemonset部署,使用本地网络。避免使用pod网络造成网络性能损耗
 根据node label来指定部署节点
03-traefik-v2.5-ds.yaml
apiVersionv1
kindService
metadata
  nametraefik-v2
  namespacekube-system
spec
  ports
nameweb
      port80
namewebsecure
      port443
nameadmin
      port8090
  selector
    apptraefik-v2
---
apiVersionapps/v1
kindDaemonSet
metadata
  nametraefik-ingress-controller-v2
  namespacekube-system
  labels
    apptraefik-v2
spec
  selector
    matchLabels
      apptraefik-v2
  template
    metadata
      annotations
        prometheus.io/path/metrics
        prometheus.io/port"8082"
        prometheus.io/scrape"true"
      nametraefik-v2
      labels
        apptraefik-v2
    spec
      serviceAccountNametraefik-ingress-controller
      terminationGracePeriodSeconds1
      containers
imageharbor.foxchan.com/traefik/traefikv2.5.6
          nametraefik-ingress-lb-v2
          ports
nameweb
              containerPort80
              hostPort80         ## 将容器端口绑定所在服务器的 80 端口
namewebsecure
              containerPort443
              hostPort443        ## 将容器端口绑定所在服务器的 443 端口
nameadmin
              containerPort8090  ## Traefik Dashboard 端口
          securityContext
            capabilities
              drop
ALL
              add
NET_BIND_SERVICE
          args
--configfile=/config/traefik.yaml
          volumeMounts
mountPath"/config"
            name"config"
mountPath/etc/traefik/logs
            namelogdir
mountPath/etc/localtime
            nametimezone
            readOnlytrue
      volumes
nameconfig
          configMap
            nametraefik-config 
namelogdir
          hostPath
            path/data/traefik/logs
            type"DirectoryOrCreate"
nametimezone
          hostPath
            path/etc/localtime
            typeFile
      tolerations## 设置容忍所有污点,防止节点被设置污点
operator"Exists"
      hostNetworktrue         ## 开启host网络,提高网络入口的网络性能
      nodeSelector## 设置node筛选器,在特定label的节点上启动
        IngressProxy"traefik2"四、其他小需求
4.1 日志轮询
官方没有日志轮询的功能,只说收到USR1 信号会重建日志文件,这里通过logrotate实现
- 在/etc/logrotate.d创建下层目录,当然也可以在非/etc/logrotate.d/下创建此目录
 
mkdir -p /etc/logrotate.d/traefik- 配置logrotate文件
 
/data/traefik/logs/*.log {
  daily
  rotate 15
  missingok
  notifempty
  compress
  dateext
  dateyesterday
  dateformat .%Y-%m-%d
  create 0644 root root
  postrotate
   docker kill --signal="USR1" $(docker ps | grep traefik |grep -v pause| awk '{print $1}')
  endscript
 }- 添加crontab计划任务,
 
sudo echo "0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.d/traefik/traefikLogrotate >/dev/null 2>&1" > /etc/crontab
4.2 时区设置
本文通过挂载时区文件实现
volumeMounts:
          - mountPath: /etc/localtime
            name: timezone
            readOnly: true
      volumes:
        - name: timezone
          hostPath:
            path: /etc/localtime
            type: File
`4.3 低版本升级
大概写个升级备注,后面专门开贴记录升级步骤
v2.4 to v2.5
kubernetes CRD
从v2.5开始,Traefik CRDS 开始支持新的API version apiextensions.k8s.io/v1,升级时候要注意
kubernetes Ingress
从v2.5开始 支持kubernetes v1.22,最低只支持 v1.14+。所以注意下api version 版本
  extensions/v1beta1 替换为 networking.k8s.io/v1beta1或者networking.k8s.io/v1 (Kubernetes v1.19+)
  Kubernetes v1.22将会放弃networking.k8s.io/v1beta1 
- ### Headers middleware: ssl redirect options
 
从v2.5开始放弃以下参数sslRedirect, sslTemporaryRedirect, sslHost and sslForceHost
- ### Headers middleware: accessControlAllowOrigin
 
从v2.5开始不再支持accessControlAllowOrigin
官方小版本升级文档
参考文档
- kubernetes 部署 traefik2.3
 - k8s部署官方文档
 










