API网关Kong学习笔记(十八):Kong Ingress Controller的CRD详细说明

作者: 李佶澳   转载请保留:原文地址   更新时间:2018/11/30 10:33:00

说明

API网关Kong学习笔记(二):Kong与Kubernetes集成的方法中介绍过Kong Ingress Controller定义的CustomResourceDefinitions,那时候了解不多,没详细记录用法。把Kong Ingress Controller的代码读了以后,基本上摸清了它的工作过程,这里详细记录一下KongPluginKongConsumerKongIngressKongCredential的用法。

相关笔记

如果是刚开始学习kong,直接从1.x开始,0.x已经不再维护,0.15是0.x的最后一个版本。

前19篇笔记是刚开始接触kong时记录的,使用的版本是0.14.1,当时对kong一知半解,笔记可能比较杂乱,从第二十篇开始是再次折腾时的笔记,使用的版本是1.0.3,笔记相对好一些。

从0.x到1.x最需要关注的变化有:1. 插件部分全部使用pdk;2. 0.x中不鼓励使用的特性都被移除了;3. 全部使用kong.db,以前的独立的dao彻底清除,代码简洁清晰了。

《API网关Kong学习笔记(零):使用过程中遇到的问题以及解决方法》

《API网关Kong学习笔记(一):Nginx、OpenResty和Kong的基本概念与使用方法》

《API网关Kong学习笔记(二):Kong与Kubernetes集成的方法》

《API网关Kong学习笔记(三):功能梳理和插件使用-基本使用过程》

《API网关Kong学习笔记(四):功能梳理和插件使用-认证插件使用》

《API网关Kong学习笔记(五):功能梳理和插件使用-安全插件使用》

《API网关Kong学习笔记(六):Kong数据平面的事件、初始化与插件加载》

《API网关Kong学习笔记(七):Kong数据平面Plugin的调用与实现》

《API网关Kong学习笔记(八):Kong Ingress Controller的实现》

《API网关Kong学习笔记(九):Kong对WebSocket的支持》

《API网关Kong学习笔记(十):Kong在生产环境中的部署与性能测试方法》

《API网关Kong学习笔记(十一):自己动手写一个插件》

《API网关Kong学习笔记(十二):插件的目录中schema分析》

《API网关Kong学习笔记(十三):向数据库中插入记录的过程分析》

《API网关Kong学习笔记(十四):Kong的Admin API概览和使用》

《API网关Kong学习笔记(十五):KongIngress的定义细节》

《API网关Kong学习笔记(十六):Kong转发请求的工作过程》

《API网关Kong学习笔记(十七):Kong Ingress Controller的使用》

《API网关Kong学习笔记(十八):Kong Ingress Controller的CRD详细说明》

《API网关Kong学习笔记(十九):Kong的性能测试(与Nginx对比)》

《API网关Kong学习笔记(二十):Kong 1.0.3在Kubernetes中的部署方法》

《API网关Kong学习笔记(二十一):Kong的开发环境(IntelliJ Idea)》

《API网关Kong学习笔记(二十二):Kong 1.0.3源代码快速走读》

《API网关Kong学习笔记(二十三):Kong 1.0.3的plugin/插件机制的实现》

KongPlugin的用法

KongPlugin的格式如下:

apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
  name: <object name>
  namespace: <object namespace>
  labels: global: "true" # optional, please note the quotes around true
consumerRef: <optional, name of an existing consumer> # optional
disabled: <boolean>  # optional
config:
    key: value
plugin: <name-of-plugin>

Kong实现了很多插件,每个插件的配置都不相同,这些不同的配置都体现在config中。

rate-limiting插件的一个实例可能是这个样子的:

apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
  name: http-svc-consumer-ratelimiting
consumerRef: consumer-team-x
config:
  hour: 1000
  limit_by: ip
  second: 100
plugin: rate-limiting

ip-restriction插件的一个实例可能是下面这个样子:

apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
  name: echo-ip-restriction
  namespace: demo-echo
disabled: false  # optional
plugin: ip-restriction
config:
#  whitelist:     #用“,”间隔的一组IP或者CIDR,要么白名单、要么黑名单
  blacklist: 192.168.33.12,172.16.129.1

它们的config字段的结构是不同的,每个插件的config字段中可以有哪些配置,在每个插件插件的文档中可以找到:rate-limitingip-restriction

KongIngress的用法

KongIngress中是一些增强配置的,这一点要特别注意。kong ingress controller会将kubernetes中原生定义的ingress转换成kong中的配置,但是kong的配置是要多于标准ingress中的内容的,多出的这些配置在KongIngress中设置。

KongIngress的结构如下,由upstreamproxyroute三部分组成:

apiVersion: configuration.konghq.com/v1
kind: KongIngress
metadata:
  name: configuration-demo
upstream:
  hash_on: none
  hash_fallback: none
  healthchecks:
    active:
      concurrency: 10
      healthy:
        http_statuses:
        - 200
        - 302
        interval: 0
        successes: 0
      http_path: "/"
      timeout: 1
      unhealthy:
        http_failures: 0
        http_statuses:
        - 429
        interval: 0
        tcp_failures: 0
        timeouts: 0
    passive:
      healthy:
        http_statuses:
        - 200
        successes: 0
      unhealthy:
        http_failures: 0
        http_statuses:
        - 429
        - 503
        tcp_failures: 0
        timeouts: 0
    slots: 10
proxy:
  protocol: http
  path: /
  connect_timeout: 10000
  retries: 10
  read_timeout: 10000
  write_timeout: 10000
route:
  methods:
  - POST
  - GET
  regex_priority: 0
  strip_path: false
  preserve_host: true
  protocols:
  - http
  - https

upstream中配置的负载均衡算法、健康检查方法等,proxy中设置的kong与backend server通信的时超时时间、重试次数等,route中设置的是路由匹配的协议、方法以及路由的优先级。

参考

  1. API网关Kong学习笔记(二):Kong与Kubernetes集成的方法

本文原创首发于网站:www.lijiaocn.com

QQ交流群

区块链实践互助QQ群:576555864

Kubernetes实践互助QQ群:947371129

Prometheus实践互助QQ群:952461804

Kong/Envoy实践互助QQ群:952503851

Ansible实践互助QQ群:955105412

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作 友情链接: lijiaocn github.com