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

Tags: kong 

目录

说明

API网关Kong(二):Kong与Kubernetes集成的方法中提到过KongIngress的定义,这里详细展开。

相关笔记

2019-05-06 16:28:56:kong 1.1.x有了一个重大变换,实现了db-less模式,可以不使用数据库了,见笔记二十六:查看全部笔记如果是刚开始学习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彻底清除,代码简洁清晰了。

定义

KongIngress在代码文件github.com/kong/kubernetes-ingress-controller/internal/apis/configuration/v1/types.go中定义:

// github.com/kong/kubernetes-ingress-controller/internal/apis/configuration/v1/types.go中定义
type KongIngress struct {
	metav1.TypeMeta `json:",inline"`
	// +optional
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Upstream *Upstream `json:"upstream,omitempty"`
	Proxy    *Proxy    `json:"proxy,omitempty"`
	Route    *Route    `json:"route,omitempty"`
}

可以看到由三部分组成UpstreamProxyRoute

type Upstream struct {
	HashOn       string        `json:"hash_on"`
	HashOnHeader string        `json:"hash_on_header"`
	HashFallback string        `json:"hash_fallback"`
	Healthchecks *Healthchecks `json:"healthchecks,omitempty"`
	Slots        int           `json:"slots"`
}

type Proxy struct {
	Protocol       string `json:"protocol"`
	Path           string `json:"path"`
	ConnectTimeout int    `json:"connect_timeout"`
	Retries        int    `json:"retries"`
	ReadTimeout    int    `json:"read_timeout"`
	WriteTimeout   int    `json:"write_timeout"`
}

type Route struct {
	Methods       []string `json:"methods"`
	RegexPriority int      `json:"regex_priority"`
	StripPath     bool     `json:"strip_path"`
	PreserveHost  bool     `json:"preserve_host"`
	Protocols     []string `json:"protocols"`
}

需要注意的是,这里的Upstream、Proxy、Route中都是一些配置参数,不是Kong中的对应对象的完整定义,譬如说,这里明显缺失了Name、Host、以及Path等。这和KongIngress定位是匹配的,KongIngress只是对Kubernetes中原生的Ingress的补充,包含了一些Kong支持的参数。

Upstream中设置的是转发时使用的哈希算法,以及slot和健康检查。

Proxy中配置的是将请求转发给Upstream对应的Target时的参数,Kong中是没有Proxy这个对象的,这里的Proxy是Service的配置项的一部分:转发时使用的协议、转发目标路径、超时时间以及重试次数。

Route中设置路由的请求方法、用正则描述的Path的优先级、是否修改Path和Host,和支持的协议等。

API网关Kong(十六):Kong转发请求的工作过程

参考

  1. API网关Kong(十六):Kong转发请求的工作过程

kong

  1. API网关Kong学习笔记(二十六): Kong 1.1引入db-less模式,无数据库部署
  2. API网关Kong学习笔记(二十五): 重温 kong ingress controller
  3. API网关Kong学习笔记(二十四): 在kubernetes中启用kong的插件
  4. API网关Kong学习笔记(二十三): Kong 1.0.3的plugin/插件机制的实现
  5. API网关Kong学习笔记(二十二): Kong 1.0.3源代码快速走读
  6. API网关Kong学习笔记(二十一): Kong的开发环境设置(IntelliJ Idea)
  7. API网关Kong学习笔记(二十): Kong 1.0.3的安装部署和与Kubernetes的对接
  8. API网关Kong学习笔记(十九): Kong的性能测试(与Nginx对比)
  9. API网关Kong学习笔记(十八): Kong Ingress Controller的CRD详细说明
  10. API网关Kong学习笔记(十七): Kong Ingress Controller的使用
  11. API网关Kong学习笔记(十六): Kong转发请求的工作过程
  12. API网关Kong学习笔记(十五): KongIngress的定义细节
  13. API网关Kong学习笔记(十四): Kong的Admin API概览和使用
  14. API网关Kong学习笔记(十三): 向数据库中插入记录的过程分析
  15. API网关Kong学习笔记(十二): 插件的目录中schema分析
  16. API网关Kong学习笔记(十一): 自己动手写一个插件
  17. API网关Kong学习笔记(十): Kong在生产环境中的部署与性能测试方法
  18. API网关Kong学习笔记(九): Kong对WebSocket的支持
  19. API网关Kong学习笔记(八): Kong Ingress Controller的实现
  20. API网关Kong学习笔记(七): Kong数据平面Plugin的调用与实现
  21. API网关Kong学习笔记(六): Kong数据平面的事件、初始化与插件加载
  22. API网关Kong学习笔记(五): 功能梳理和插件使用-安全插件使用
  23. API网关Kong学习笔记(四): 功能梳理和插件使用-认证插件使用
  24. API网关Kong学习笔记(三): 功能梳理和插件使用-基本使用过程
  25. API网关Kong学习笔记(二): Kong与Kubernetes集成的方法
  26. API网关Kong学习笔记(一): Nginx、OpenResty和Kong入门,基础概念和安装部署
  27. API网关Kong学习笔记(零): 使用过程中遇到的问题以及解决方法

推荐阅读

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

友情链接:  系统软件  程序语言  运营经验  水库文集  网络课程  微信网文  发现知识星球