Kong之前都是使用Admin API来进行管理的,Kong主要暴露两个端口管理端口8001和代理端口8000,管理Kong主要的是为上游服务配置Service、Routes、Plugins、Consumer等实体资源,Kong按照这些配置规则进行对上游服务的请求进行路由分发和控制。在Kubernetes集群环境下,Admin API方式不是很适应Kubernetes声明式管理方式。所以Kong在Kubernetes集群环境下推出Kong Ingress Controller。Kong Ingress Controller定义了四个CRDs(CustomResourceDefinitions),基本上涵盖了原Admin API的各个方面。
- kongconsumers:Kong的用户,给不同的API用户提供不同的消费者身份。
- kongcredentials:Kong用户的认证凭证。
- kongingresses:定义代理行为规则,是对Ingress的补充配置。
- kongplugins:插件的配置。
Kong创建的CRDs:
kubectl get crds
NAME CREATED AT
kongconsumers.configuration.konghq.com 2019-12-15T08:02:29Z
kongcredentials.configuration.konghq.com 2019-12-15T08:02:29Z
kongingresses.configuration.konghq.com 2019-12-15T08:02:29Z
kongplugins.configuration.konghq.com 2019-12-15T08:02:29Z
以下为Kong系列-04-Helm安装Kong 1.3.0 with PostgreSQL and with Ingress Controller的环境,可以看出Kong Pod其中有两个容器,一个为ingress-controller,一个为kong。Kong对外提供两个服务,gateway-kong-admin为管理服务,支持Admin API,gateway-kong-proxy为代理服务,这两个服务都由kong提供,而CRDs的API接口是ingress-controller容器提供的。
kubectl get all -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/gateway-kong-79498b67b7-plmlm 2/2 Running 5 34d 10.244.1.13 k8s-node1 <none> <none>
pod/gateway-kong-79498b67b7-zcfh6 2/2 Running 5 34d 10.244.2.10 k8s-node2 <none> <none>
pod/gateway-kong-init-migrations-5qdxc 0/1 Completed 0 34d 10.244.1.10 k8s-node1 <none> <none>
pod/gateway-postgresql-0 1/1 Running 1 34d 10.244.1.14 k8s-node1 <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/gateway-kong-admin NodePort 10.1.6.70 <none> 8444:32444/TCP 34d app=kong,component=app,release=gateway
service/gateway-kong-proxy NodePort 10.1.232.237 <none> 80:32080/TCP,443:32443/TCP 34d app=kong,component=app,release=gateway
service/gateway-postgresql ClusterIP 10.1.161.34 <none> 5432/TCP 34d app=postgresql,release=gateway,role=master
service/gateway-postgresql-headless ClusterIP None <none> 5432/TCP 34d app=postgresql,release=gateway
service/kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 34d <none>
NAME READY UP-TO-DATE AVAIL