vlambda博客
学习文章列表

API和API网关的认识

1 概述

API的应用较为广泛

我们从不同角度理解下APIAPI网关的知识点


2 API接口

2.1 认证

访问API时,需要提供认证方法,主流的认证方法有用户名密码方式,有证书认证方式,有token的方式,这些都可以通过curl来模拟验证,例如token方式访问APIserver

kubectl create sa cluster-admin

kubectl create clusterrolebindingcluster-admin-majorinche --clusterrole=cluster-admin--serviceaccount=default:cluster-admin

new_name="cluster-admin"

token=`kubectl get serviceaccounts ${new_name} -oyaml |grep token | awk -F': ' '{print $2}'`

new_token=`kubectl get secrets $token -oyaml | grep"token:" | awk -F': ' '{print $2}'`

TOKEN=`echo $new_token | base64 -d`

curl -k -H "Authorization: Bearer $TOKEN" https://10.2.11.65:6443/API

 

2.2 请求和配额

API服务端接收到客户端的HTTP请求后,可以根据路径或者头部信息中的用户身份,访问不同的服务,根据请求类型,例如GET或者POST,决定是查询或者更改请求的资源

从当前K8SAPIserver组件的API使用情况来看,查询类的API请求类型占多数,例如LISTWATCHGET

verb

count

LIST

754

WATCH

546

GET

286

DELETE

143

POST

134

DELETECOLLECTION

105

PATCH

95

PUT

95

CREATE

61

UPDATE

56

CONNECT

19

 

而配额的管理,就是根据这些请求的次数,进行管理和计费

例如限制每日请求次数,针对不同类型和访问次数进行收费


2.3 输入与输出

输入与输出是API接口的一个特点,强调的是,需要哪些资源,而又能够反馈出什么结果

在编程中,程序中每个函数的输入对应着函数的参数,输出对应着返回值,详细的输入输出的说明文档和示例可以提升函数的开发友好度。

在数据中心中,网络的输入是由大量的交换机,路由器,网络模块和网络控制软件构成,而输出就是更低的网络延迟,更快的网络带宽,更稳定的网络质量

K8S的优越性也在于其定义了一套优秀的API接口,例如cni对网络插件的支持,csi对存储插件的支持,cri对容器运行时的支持,这样的设计可以促进基于用户自身场景的创新,突出K8S的平台性,而非一个大而全的臃肿产品

 

2.4 k8s中的API

一个普通的yaml文件如下

[root@d0404 kubeflow]# cat crc.yaml

APIVersion:rbac.istio.io/v1alpha1

kind:ClusterRbacConfig

metadata:

  name: default

spec:

  exclusion:

    namespaces:

    -kfserving-system

  mode:ON_WITH_EXCLUSION

 

当执行kubectlapply -f crc.yaml时,就会把crc.yaml中的内容写入到https://10.2.11.65:6443/apis/rbac.istio.io/v1alpha1/clusterrbacconfigs中去

 


3 API网关

3.1 需求

API本质是服务的入口,而为什么要引入API网关的概念呢?

这个其实是随着微服务的需求而出现的,因为每个微服务,由于是不同的开发语言,不同的服务角色,其访问方式可能是不一样的,这个就给客户端造成困扰。如果出现一个统一的接口,所有微服务都访问这个统一接口,可以提高微服务之间通信的效率,所以API网关是协调微服务之间如何处理API请求的。

每个微服务只需要在API网关上注册好本服务的访问方式就可以,不需要考虑其他微服务的调用方式。


3.2 中间件

一些公共的功能,例如流量控制,身份认证,负载均衡这些,都属于中间件的任务,这些没有必要在各个微服务中,重复开发,可以直接交给API网关统一实现

例如主流的API网关kong,其构成的一个组件就是nginx,而nginx本身可以实现四层和七层的负载均衡

kong的原型图

微服务之间不直接通信,都是通过API网关间接通信


4 总结

总得来说,API可以理解为一个接入层,由三部分构成:负载均衡,http代理服务器和请求动作。

目前使用API提供服务的产品还有对象存储,URL化的数据资源,优化了数据的流转方式,解决了块存储和文件系统相互间的传输不便。

现代软件产品的设计趋势是,以API接口的形式,扩展产品本身的功能,以适应不同的场景,理解API相关的知识点,有助于我们更好的掌握云原生产品的工作原理