📋
k8s use handbook
  • 概述
  • 1. kuberbetes应用接入准则篇
    • 1.1 git分支管理规范
    • 1.2 接入elk字段格式以及约定
    • 1.3 健康检测接口规范
    • 1.4 项目命名规范
  • 2. kubernetes集群部署篇
    • 2.0 kubernetes手动安装概览
      • 201 创建跟证书和秘钥
      • 202 ETCD集群部署及维护
      • 203 kubectl部署以及基本使用
      • 204 Master节点部署及维护
        • 2041 kube-apiserver
        • 2042 kube-scheduler
        • 2043 kube-controller-manager
      • 205 Node节点部署及维护
        • 2051 Flannel部署及维护
        • 2052 kubernetes runtime部署及维护
        • 2053 kubelet
        • 2054 kube-proxy
    • 2.1 kubernetes ansible安装
    • 2.2 kubernetes kubeadm安装
    • 2.3 kubernetes 组件安装
      • 231 coredns
      • 232 kube-dashboard
  • 3. kubernetes权限控制篇
    • 认证
    • 授权
    • 准入机制
  • 4. what happens when k8s .....
    • Kubernetes使用什么方法方法来检查应用程序的运行状况?
    • 如何优雅的关闭pod?
    • TLS bootstrapping 是如何工作的?
    • 怎么编辑kubernetes的yaml文件以及kubernetes的控制是什么样的?
    • deployment如何使用不同的策略部署我们的程序?
    • Kubernetes 如何接收请求,又是如何将结果返回至客户端的?
    • Kubernetes 的调度流程是怎样的?
    • Kubelet 是如何接受调度请求并启动容器的?
    • Kube-proxy 的作用,提供的能力是什么?
    • Kubernetes 控制器是如何工作的?
    • ingress-service-deployment如何关联的?
    • 如何指定pod的运行节点?
    • Https 的通信过程?
  • 5. kubernetes私有仓库篇
  • 6. kubernetes CI/CD篇
    • 5. kubernetes cicd发布流水线
  • 6. kubernetes日志系统篇
    • 6.1 elk使用规范和指南
    • 6.2 kibana搜索简易指南
    • 6.3 基于es api进行查询的注意事项
    • 6.4 集群部署
      • 6.4.1 es规划
        • 索引的生命周期
      • 6.4.2 安装
      • 6.4.3 elasticsearch配置
      • 6.4.4 logstash配置
      • 6.4.5 kibana配置
      • 6.4.6 enable-xpack
        • 6.4.6.1 X-Pack on Elasticsearch
        • 6.4.6.2 X-Pack on Logstash
        • 6.4.6.3 X-Pack on Kibana
        • 6.4.6.4 xpack破解
        • 6.4.6.5 LDAP user authentication
      • 6.4.7 Cerebro configuration
      • 6.4.8 Curator configuration
    • 6.10 备份恢复
  • 7.0 kuberbetes服务暴露Ingress篇
    • 7.1 Ingress规划
    • 7.2 Traefik ingress controller
      • 7.2.1 Traefik配置详解
      • 7.2.2 Traefik部署
      • 7.2.3 分场景使用示例
      • 7.2.4 Traefik功能示例
      • 7.2.5 Traefik日志收集
      • 7.2.6 https证书更新
    • 7.3 Nginx ingress controller
      • 7.3.1 Nginx 配置详解
      • 7.3.2 Nginx 部署
      • 7.3.3 使用示例
    • 7.4 ingress日常运维
  • 8.0 kubernetes监控篇
    • 8.1 prometheus非k8s部署
    • 8.2 prometheusk8s部署
    • 8.3 prometheus 配置文件详解
    • 8.3 prometheus alertmanager
  • 9.0 kubernetes配置管理篇
  • 10.0 权威DNS篇
    • 10.1 PowerDNS安装部署
    • 10.1 PowerDNS zone设置
由 GitBook 提供支持
在本页
  • Annotate的配置详解
  • Traffik 自定义https证书
  • 定义后端的分发策略
  • session 粘滞
  • http 强制跳转https
  • 自定义请求header
  • 请求路径前添加路径
  • 请求路径删除前缀
  • 定义白名单

这有帮助吗?

  1. 7.0 kuberbetes服务暴露Ingress篇
  2. 7.2 Traefik ingress controller

7.2.4 Traefik功能示例

Annotate的配置详解

通用配置

  • kubernetes.io/ingress.class: traefik

    Ingress声明,这里声明了ingress后端采用traefik实现,而不是nginx的controller

  • ingress.kubernetes.io/whitelist-source-range: "1.2.3.0/24, fe80::/16"

    配置访问白名单,支持ipv4和ipv6

  • ingress.kubernetes.io/auth-type: basic

    http认证模式,此处为basic模式

  • ingress.kubernetes.io/auth-secret: mysecret

    basic认证的对应的username和password,这里对应的traefik所在kubernetes命名空间里的secrets

前端配置

  • traefik.frontend.rule.type: PathPrefixStrip

    对于在前端配置多个路径转发时,必须配置改选项。例如:

  • traefik.frontend.priority: "3"

    配置前端的权重,值越高则优先匹配

  • traefik.frontend.passHostHeader: "false"

    关闭传入Hearder

  • traefik.protocol=https

    使用https协议

  • traefik.frontend.entryPoints=http,https

    同时支持http和https

后端配置

  • traefik.backend.loadbalancer.method=drr

    后端Service的负载均衡策略,目前traefik支持的策略包括:wrr(加权轮训调度算法)和drr(动态加权循环调度算法)

  • traefik.backend.loadbalancer.stickiness=true

    是否开启负载均衡器的session亲和性

  • traefik.backend.loadbalancer.stickiness.cookieName=NAME

    手动配置后端session亲和性的cookie名称

  • traefik.backend.loadbalancer.sticky=true

    弃用

健康检查

  • traefik.backend.healthcheck.path=/health

    traefik的监控检查路径

  • traefik.backend.healthcheck.interval=5s

    健康检查的时间间隔

  • traefik.backend.circuitbreaker: "NetworkErrorRatio() > 0.5"

    监测某台节点上的服务错误率达到50%时,自动下线该节点。

  • traefik.backend.circuitbreaker: "LatencyAtQuantileMS(50.0) > 50"

    监测某台节点上服务的延时大于50ms时,自动下线该节点。

  • traefik.backend.circuitbreaker: "ResponseCodeRatio(500, 600, 0, 600) > 0.5"

    监测某台节点上服务返回状态码为[500-600]在[0-600]区间占比超过50%时,自动下线该节点。

Traffik 自定义https证书

后期配置tls证书, 此证书只允许具有相同namespace ingress使用

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-web-ui
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: traefik-ui.minikube
    http:
      paths:
      - backend:
          serviceName: traefik-web-ui
          servicePort: 80
  tls:
    - secretName: traefik-ui-tls-cert

在ingress 创建的空间内创建secert

kubectl -n kube-system create secret tls traefik-ui-tls-cert --key=tls.key --cert=tls.crt

定义后端的分发策略

这里支持多种负载均衡方法: wrr: 加权轮询 drr: 动态轮询: 这会为表现比其他服务器好的服务器增加权重。当服务器表现有变化的时,它也会会退到正常权重。

定义在service 资源中, 不能定义在ingress资源中

kind: Service
apiVersion: v1
metadata:
  name: nginx
  annotations:
traefik.ingress.kubernetes.io/load-balancer-method: drr
spec:
  selector:
app: nginx
  ports:
- protocol: TCP
  port: 80
  targetPort: 80

session 粘滞

所有的负载平衡器都支持粘滞会话(sticky sessions)。当粘滞会话被开启时,会有一个名称叫做_TRAEFIK_BACKEND的cookie在请求被初始化时被设置在请求初始化时。在随后的请求中,客户端会被直接转发到这个cookie中存储的后端(当然它要是健康可用的),如果这个后端不可用,将会指定一个新的后端。 开启的方法为添加traefik.ingress.kubernetes.io/affinity: "true" 的annotations

定义在service 资源中, 不能定义在ingress资源中

kind: Service
apiVersion: v1
metadata:
  name: nginx
  annotations:
traefik.ingress.kubernetes.io/affinity: "true"
traefik.ingress.kubernetes.io/load-balancer-method: drr
spec:
  selector:
app: nginx
  ports:
- protocol: TCP
  port: 80
  targetPort: 80

请求header 如下

➜  ~ curl -H "Host: ngx09.gxd88.cn" http://internal/api/ -v
GET /api/ HTTP/1.1
Host: ngx09.gxd88.cn
User-Agent: curl/7.51.0
Accept: /
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Content-Length: 612
< Content-Type: text/html
< Date: Sun, 05 Aug 2018 04:07:11 GMT
< Etag: "54999765-264"
< Last-Modified: Tue, 23 Dec 2014 16:25:09 GMT
< Server: nginx/1.7.9
< Set-Cookie: _c43d4=http://172.20.0.162:80; Path=/.   cookie 记录后端服务IP
< Vary: Accept-Encoding

http 强制跳转https

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx05
  namespace: default
  labels:
    traffic-type: internal
  annotations:
    traefik.ingress.kubernetes.io/redirect-entry-point: https
spec:
  rules:
  - host: ngx05.gxd88.cn
http:
  paths:
  - backend:
  serviceName: nginx
  servicePort: 80

或者使用rewrite

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: redirectdomain
  namespace: default
  labels:
    traffic-type: internal
  annotations:
    traefik.ingress.kubernetes.io/redirect-permanent: "true"
    traefik.ingress.kubernetes.io/redirect-regex: ^http://(.*)
    traefik.ingress.kubernetes.io/redirect-replacement: https://$1
spec:
  rules:
  - host: redirectdomain.gxd88.cn
    http:
      paths:
      - path: /image
        backend:
          serviceName: nginx
          servicePort: 80

自定义请求header

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: internal
  namespace: default
  labels:
    traffic-type: internal
  annotations:
    kubernetes.io/ingress.class: traefik
    ingress.kubernetes.io/custom-request-headers: traffic-type:internal||team:devops
spec:
  rules:
  - host: ngx-internal.gxd88.cn
    http:
      paths:
      - backend:
          serviceName: nginx
          servicePort: 80

请求路径前添加路径

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: addpath
  namespace: default
  labels:
    traffic-type: internal
  annotations:
    traefik.ingress.kubernetes.io/request-modifier: AddPrefix:/api
spec:
  rules:
  - host: ngx09.wecsh.net
    http:
      paths:
      - path: /a
        backend:
          serviceName: nginx
          servicePort: 80

请求ngx09.wecsh.net/a 到后端服务为/api/a

请求路径删除前缀

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: deletepath01
  namespace: default
  labels:
    traffic-type: internal
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip
spec:
  rules:
  - host: del.gxd88.cn
    http:
      paths:
      - path: /api/v1
        backend:
          serviceName: nginx
          servicePort: 80

请求del.gxd88.cn/api/v1/1到后端为del.gxd88.cn/1

定义白名单

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx03
  namespace: default
  annotations:
    kubernetes.io/ingress.class: traefik-external
    ingress.kubernetes.io/whitelist-x-forwarded-for: "false"
    traefik.ingress.kubernetes.io/whitelist-source-range: "10.40.0.227"
spec:
  rules:
  - host: ngx03.gxd88.cn
    http:
      paths: /api
      - backend:
          serviceName: nginx
          servicePort: 80
上一页7.2.3 分场景使用示例下一页7.2.5 Traefik日志收集

最后更新于5年前

这有帮助吗?