本文最后编辑于  前,其中的内容可能需要更新。
                
                
                    
                
                
                上次部署完成了k8s的基本框架,现在开始部署ingress,ingress其实就是从 kuberenets 集群外部访问集群的一个入口,将外部的请求转发到集群内不同的 Service 上,其实就相当于 nginx、haproxy 等负载均衡代理服务器。
创建traefik的crd资源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
   | apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata:   name: ingressroutes.traefik.containo.us spec:   group: traefik.containo.us   version: v1alpha1   names:     kind: IngressRoute     plural: ingressroutes     singular: ingressroute   scope: Namespaced --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata:   name: middlewares.traefik.containo.us spec:   group: traefik.containo.us   version: v1alpha1   names:     kind: Middleware     plural: middlewares     singular: middleware   scope: Namespaced --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata:   name: ingressroutetcps.traefik.containo.us spec:   group: traefik.containo.us   version: v1alpha1   names:     kind: IngressRouteTCP     plural: ingressroutetcps     singular: ingressroutetcp   scope: Namespaced --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata:   name: ingressrouteudps.traefik.containo.us spec:   group: traefik.containo.us   version: v1alpha1   names:     kind: IngressRouteUDP     plural: ingressrouteudps     singular: ingressrouteudp   scope: Namespaced --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata:   name: tlsoptions.traefik.containo.us spec:   group: traefik.containo.us   version: v1alpha1   names:     kind: TLSOption     plural: tlsoptions     singular: tlsoption   scope: Namespaced --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata:   name: tlsstores.traefik.containo.us spec:   group: traefik.containo.us   version: v1alpha1   names:     kind: TLSStore     plural: tlsstores     singular: tlsstore   scope: Namespaced --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata:   name: traefikservices.traefik.containo.us spec:   group: traefik.containo.us   version: v1alpha1   names:     kind: TraefikService     plural: traefikservices     singular: traefikservice   scope: Namespaced --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata:   name: serverstransports.traefik.containo.us spec:   group: traefik.containo.us   version: v1alpha1   names:     kind: ServersTransport     plural: serverstransports     singular: serverstransport   scope: Namespaced
 
   | 
 
1
   | kubectl apply -f traefik-crd.yaml
   | 
 
创建rbac.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
   |  apiVersion: v1 kind: ServiceAccount metadata:   namespace: kube-system   name: traefik-ingress-controller ---
  kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1beta1 metadata:   name: traefik-ingress-controller   namespace: kube-system rules:   - apiGroups:       - ""     resources:       - services       - endpoints       - secrets     verbs:       - get       - list       - watch   - apiGroups:       - extensions       - networking.k8s.io     resources:       - ingresses       - ingressclasses     verbs:       - get       - list       - watch   - apiGroups:       - extensions       - networking.k8s.io     resources:       - ingresses/status     verbs:       - update   - apiGroups:       - traefik.containo.us     resources:       - ingressroutes       - ingressroutetcps       - ingressrouteudps       - middlewares       - tlsoptions       - tlsstores       - traefikservices       - serverstransports     verbs:       - get       - list       - watch   - apiGroups:       - networking.x-k8s.io     resources:       - gatewayclasses       - gatewayclasses/status       - gateways     verbs:       - get       - list       - watch   - apiGroups:       - networking.x-k8s.io     resources:       - gatewayclasses/status     verbs:       - get       - patch       - update   - apiGroups:       - networking.x-k8s.io     resources:       - gateways/status     verbs:       - get       - patch       - update   - apiGroups:       - networking.x-k8s.io     resources:       - httproutes     verbs:       - create       - delete       - get       - list       - patch       - update       - watch   - apiGroups:       - networking.x-k8s.io     resources:       - httproutes/status     verbs:       - get       - patch       - update ---
  kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata:   name: traefik-ingress-controller roleRef:   apiGroup: rbac.authorization.k8s.io   kind: ClusterRole   name: traefik-ingress-controller subjects:   - kind: ServiceAccount     name: traefik-ingress-controller     namespace: kube-system
 
 
  | 
 
1
   | kubectl apply -f traefik-rbac.yaml -n kube-system
   | 
 
创建cokfigmap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
   | kind: ConfigMap apiVersion: v1 metadata:   name: traefik-config data:   traefik.yaml: |-     ping: ""                    ## 启用 Ping     serversTransport:       insecureSkipVerify: true  ## Traefik 忽略验证代理服务的 TLS 证书     api:       insecure: true            ## 允许 HTTP 方式访问 API       dashboard: true           ## 启用 Dashboard       debug: false              ## 启用 Debug 调试模式     metrics:       prometheus: ""            ## 配置 Prometheus 监控指标数据,并使用默认配置     entryPoints:       web:         address: ":80"          ## 配置 80 端口,并设置入口名称为 web       websecure:         address: ":443"         ## 配置 443 端口,并设置入口名称为 websecure     providers:       kubernetesCRD: ""         ## 启用 Kubernetes CRD 方式来配置路由规则       kubernetesIngress: ""     ## 启用 Kubernetes Ingress 方式来配置路由规则       kubernetesGateway: ""     ## 启用 Kubernetes Gateway API     experimental:                      kubernetesGateway: true   ## 允许使用 Kubernetes Gateway API     log:       filePath: ""              ## 设置调试日志文件存储路径,如果为空则输出到控制台       level: error              ## 设置调试日志级别       format: json              ## 设置调试日志格式     accessLog:       filePath: ""              ## 设置访问日志文件存储路径,如果为空则输出到控制台       format: json              ## 设置访问调试日志格式       bufferingSize: 0          ## 设置访问日志缓存行数       filters:         #statusCodes: ["200"]   ## 设置只保留指定状态码范围内的访问日志         retryAttempts: true     ## 设置代理访问重试失败时,保留访问日志         minDuration: 20         ## 设置保留请求时间超过指定持续时间的访问日志       fields:                   ## 设置访问日志中的字段是否保留(keep 保留、drop 不保留)         defaultMode: keep       ## 设置默认保留访问日志字段         names:                  ## 针对访问日志特别字段特别配置保留模式           ClientUsername: drop           headers:                ## 设置 Header 中字段是否保留           defaultMode: keep     ## 设置默认保留 Header 中字段           names:                ## 针对 Header 中特别字段特别配置保留模式             User-Agent: redact             Authorization: drop             Content-Type: keep     #tracing:                     ## 链路追踪配置,支持 zipkin、datadog、jaeger、instana、haystack 等      #  serviceName:               ## 设置服务名称(在链路追踪端收集后显示的服务名)     #  zipkin:                    ## zipkin配置     #    sameSpan: true           ## 是否启用 Zipkin SameSpan RPC 类型追踪方式     #    id128Bit: true           ## 是否启用 Zipkin 128bit 的跟踪 ID     #    sampleRate: 0.1          ## 设置链路日志采样率(可以配置0.0到1.0之间的值)     #    httpEndpoint: http://localhost:9411/api/v2/spans     ## 配置 Zipkin Server 端点    
 
   | 
 
1
   | kubectl apply -f traefik-config.yaml -n kube-system
   | 
 
traefik 安装前准备
在部署traefik之前 还需要安装Service APIs 
安装api的两种方式
1
   | kubectl apply -k "github.com/kubernetes-sigs/service-apis/config/crd?ref=v0.3.0"
   | 
 
网络不佳的情况下 推荐下载https://github.com/kubernetes-sigs/gateway-api/tree/master/config/crd/bases下所有文件
创建deploy.yaml 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
   | apiVersion: v1 kind: Service metadata:   name: traefik   labels:     app: traefik spec:   ports:     - name: web       port: 80     - name: websecure       port: 443     - name: admin       port: 8080   selector:     app: traefik --- apiVersion: apps/v1 kind: DaemonSet metadata:   name: traefik-ingress-controller   labels:     app: traefik spec:   selector:     matchLabels:       app: traefik   template:     metadata:       name: traefik       labels:         app: traefik     spec:       serviceAccountName: traefik-ingress-controller       terminationGracePeriodSeconds: 1       containers:         - image: traefik:v2.4.3           name: traefik-ingress-lb           ports:             - name: web               containerPort: 80               hostPort: 80                      - name: websecure               containerPort: 443               hostPort: 443                     - name: admin               containerPort: 8080             resources:             limits:               cpu: 2000m               memory: 1024Mi             requests:               cpu: 1000m               memory: 1024Mi           securityContext:             capabilities:               drop:                 - ALL               add:                 - NET_BIND_SERVICE           args:             - --configfile=/config/traefik.yaml           volumeMounts:             - mountPath: "/config"               name: "config"           readinessProbe:             httpGet:               path: /ping               port: 8080             failureThreshold: 3             initialDelaySeconds: 10             periodSeconds: 10             successThreshold: 1             timeoutSeconds: 5           livenessProbe:             httpGet:               path: /ping               port: 8080             failureThreshold: 3             initialDelaySeconds: 10             periodSeconds: 10             successThreshold: 1             timeoutSeconds: 5           volumes:         - name: config           configMap:             name: traefik-config        tolerations:                       - operator: "Exists"       nodeSelector:                        kubernetes.io/hostname: k8s-master   
 
   | 
 
  如果需要自定义标签的话
1 2
   | kubectl label nodes <节点名称> <标签key>=<value> kubectl get nodes --show-labels
   | 
 
至此 traefik部署完成,如果需要访问traefik的dashboard
部署dashboard
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   | apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata:   name: traefik-dashboard-route spec:   entryPoints:   - web   routes:   - match: Host(`traefik.k8s.local`)     kind: Rule     services:       - name: traefik         port: 8080
 
   | 
 
1
   | kubectl apply -f traefik-dashboard.yaml -n kube-system
   | 
 
修改本地hosts文件
1
   | 172.16.8.10 traefik.k8s.local 
   | 
 
访问http://traefik.k8s.local  即可看到dashboard