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需要关注的变化有:
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"`
}
可以看到由三部分组成Upstream
、Proxy
、Route
。
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,和支持的协议等。