Kubernetes学习笔记-从应用访问pod原数据以及其他资源(2)20220506

与kubernetes API服务器交互

之前学到了Downward API提供了一种简单的方式,将pod和容器的元数据传递给她们内部运行的进程,这种方式紧紧可以暴露一个pod自身的元数据,而且至可以暴露部分元数据。在一些情况下,我们应用需要知道其他pod信息,甚至是集群中踢啊资源信息,这种情况下Downward API方式将无能为力

之前学过可以通过服务相关环节变老或DNS来获取服务和pod的信息,但如果应用需要获取其他资源的信息或获取最新信息,就需要直接与API服务器进行交互

可以先了解下服务器的REST endpoint,这样可以大致了解下什么是API服务器。

1)探究Kubernetes REST API

先尝试直接访问API服务器,可以通过运行kubectl cluster-info命令来获取服务器的URL

$kubectl cluster-info

如果服务器使用https协议,需要授权,所以与服务器交互并不是一件简单的事情,

尝试通过curl来访问,使用curl的--insecure(或-k)选项来跳过服务器证书检查环节,,但是不能走太远。

可以通过执行kubectl proxy命令,通过代理与服务器交互,而不是自行来处理验证过程。

通过kubectl proxy访问api服务器

$kubectl proxy

Starting to serve on 127.0.0.1:8001

我们无须传递其他任何参数,以为kubectl已经知晓所需的所有参数(API服务器URL、认证凭证等)一旦启动,代理服务器就将在本地端口8001接受连接请求,后续可以通过curl来看api服务器返回什么.

curl localhost:8001

2)从pod内部与API服务器进行交互

downward api提供了一种简单的方式,将pod和容器的元数据传递给他们内部运行的进程。
但这种方式其实仅仅可以暴露一个pod自身的元数据,而且只可以暴露部分元数据。
一些情况下我们的应用需要知道其他pod的信息,甚至是集群的其他资源信息,这种情况下downward api方式将无能为力。
前面讲到的通过服务相关的环境变量或者DNS来获取服务和pod的信息,但如果应用需要获取其他资源信息或获取最新信息,就需要直接与api服务器进行交互
先看下kebernetes rest api
尝试访问api服务器,可以通过kubectl cluster-info命令得到服务器的url
$kubectl cluster-info
返回url,应该curl看看返回内容,发现无权限
可以通过kubectl proxy访问api服务器
$kubectl proxy
可以看到返回url以及端口
通过kubectl proxy 研究kubernetes api
可以curl url:port继续后续的研究
简要说明pod如何与kubernetes交互
pod中运行的应用如何正确访问kubernetes 的api:

  • 应用应该验证api服务器的证书是否是证书机构所签发,这个证书是在ca.crt文件中
  • 应用应该将它在token文件中持有的凭证通过Authorization标头来获得api服务器的授权
  • 当对pod所在命名空间的api对象进行CRUD操作时,应该使用namespace文件来传递命名空间信息到api服务器

定义:CRUD代表创建、读取、修改和删除操作,与之对应的http方法分别是post、get、patch/put以及delete


通过ambassador容器简化与api服务器交互
ambassador容器模式介绍
如果一个应用需要查询api服务器,除了之前讲到的直接与api服务器交互,可以在主容器运行的同时,启动一个ambassador容器,并在其中运行kubectl proxy命令,通过它来实现与api服务器的交互。
这种模式下,运行在主容器的应用不是直接与api服务器进行交互,而是通过http协议(非https协议)与ambassador连接,并且由ambassador通过https协议来连接api服务器,对应用透明的来处理安全问题
可以使用ambassador容器来屏蔽连接外部服务的复杂性,从而简化在主容器中运行的应用。ambassador容器可以跨多个应用复用,而且与主应用使用的开发语言无关。不足之处是需要运行额外的进程,并且消耗资源

你可能感兴趣的:(学习笔记,kubernetes,学习,docker)