1. kubernetes api server 
      独特的kubernetes proxy API 接口,通过接口访问pod某个访问接口(访问pod),如果想要访问具体的服务,需要在后面加上服务路径
  2. 为什么k8s nodeport映射方式老是不通 k8s nodeport原理_HTTP

  3.  
      在kubernetes集群之外访问某个pod容器的服务(http服务)时,可以用proxy API实现,这种 场景多用于管理目的。
      每个node节点上的kubelet每隔一个时间周期,就会调用一个API server的rest接口报告自身状态,APIserver接收到这些信息后,将节点状态信息更新到etcd中。
      kube-controller-manager中的node controller模块通过api server提供的watch接口,实时监控node信息


  4. Controller manager 
      负责集群内的node,pod副本,服务端点(endpoint),服务账号(serviceAccount)资源定额(resource quota)等管理。
      当前提供了2种方式的配额约束,分别是limitranger与resourcequota,其中limitranger作用于pod和Container上,resourcequota作用于namespace上,限定一个namespace里的各类资源的使用总额。
        resourcequota controller支持3个层次的资源配额管理
  1. 容器级别,可以对cpu和memory进行限制
  2. pod级别,可以对一个pod内所有容器的可用资源进行限制
  3. namespace级别,为namespace(多租户)级别的资源限制
  4. pod数量,replication controller数量,service数量,resourcequota数量,secret数量,pv数量
  5. namespace controller:创建新的namespace保存在etcd中,
  6. endpoint controller:endpoints表示一个service对应的所有pod副本的访问地址,而endpoints controller负责生成和维护所有endpoints对象的控制器,kube-proxy进程获取每个service的endpoints,实现service的负载均衡功能
  7. Service controller的作用:kubernetes集群与外部的云平台之间的接口控制器

  1. scheduler 
      在整个系统中承担了承上启下的功能,承上:接收controller manager创建的新pod,启下安置工作完成后,目标node上的kubelet服务进程负责接管,负责pod生命周期中下半生。并将pod的绑定信息写入etcd中,整个调度过程中涉及3个对象:待调度pod列表,可用node列表,调度算法和策略。
  2. kubelet 
      每个node节点上都会启动一个kubelet服务进程,处理master节点下发到本节点的任务,管理pod及pod中的容器。
      节点管理:设置kubelet的启动参数:--register-node来决定是否向API Server注册自己。如果参数的值为true。kubelet通过API Server注册自己,并定时向APIServer发送节点的新信息,接收信息写入etcd。
      kubelet读取监听到的信息,如果是创建和修改pod任务
      (1)为该pod创建一个数据目录
      (2)从APIServer读取该pod清单
      (3)为该pod挂载外部卷
      (4)下载pod用到的secret
      (5)用kubernetes/pause镜像为每个pod创建一个容器,主要负责pod中所有其他容器的网络,没创建一个新的pod,kubelet都会创建一个pause容器,
      (6)为pod中的每个容器做如下处理
        为容器计算一个hash值,然后用容器的名字去查询对应docker容器的hash值,若查找到容器,且2者的hash值不同,则停止docker中容器的进程,并停止与之关联的pause容器的进程。如果容器被终止了,且容器没有指定restartpolicy(重启策略),不做任何处理

5. 





  pod管理1. 文件:kubelet启动参数 --config指定的配置文件目录下的文件
2. HTTP端点(URL)通过 --manifest-url参数设置
3. APIServer:kubelet通过APIServer监听etcd目录,同步pod列表


7. kube-proxy 
  在kubernetes集群的每个node上都会运行一个kube-proxy服务进程,这个进程可以看作service的透明代理及负载均衡器,核心功能是将某个service的访问请求转发到后端的多个pod实例上,kube-proxy在运行过程中动态创建与Service相关的iptables规则,实现clusterIP及Nodeport的请求流量重定向到kube-proxy进程上对应服务的代理端口的功能。由于iptables机制针对是本地的kube-proxy端口,所有node上都要运行kube-proxy组件。kube-proxy在iptables中为每个service创建由clusterip+service端口(服务端口通过target到pod,kubectl get svc 可以得到pod的端口)到kube-proxy所在主机ip+service代理服务端口的转发规则。
  kube-proxy就是为service打开一个随机宿主机本地端口。代理只是代理一个端口服务,只要是访问该端口的连接都被代理到相应的某个后端pod
  kube-proxy:负责将对应服务端口来的通信映射给后端对应的pod,他既是以NAT,同时也有负载均衡的功能。kube-proxy会自动配置本地的iptables rales规则,一旦有网包想访问服务的80端口,将到达的网包转发到某个绑定pod的8080端口,

8. cadvisor 
  kubelet通过cadvisor获取其所在节点及容器的数据,heapster通过带着关联标签的pod分组这些信息,这些数据被推到一个可配置的后端,用于存储和可视化展示,当前后端是influxDB。主要监控CPU,内存,文件系统和网络使用的统计信息。kubelet作为连接kubernetes master和各节点机之间的桥梁,管理运行在节点机上的pod和容器。
9. 分析集群安全机制
1. API Server认证管理
2. HTTPS证书认证的原理
3. 通过第三方认证机构CA。双向认证ssl协议的具体通信过程,要求服务器和用户双方都有证书。单向认证ssl协议不需要客户端拥有CA证书
4. HTTP token认证原理
oken是一个很复杂的字符串,用私钥签名一个字符串后的数据就可以当作一个token,此外,每个token对应一个用户名,存储在APIServer能访问的一个文件中,当客户端发起API调用请求时,需要在HTTP header里放入token,API Server就能识别合法用户和非法用户5. HTTP base认证
用户名+冒号+密码,用base64算法进行编码后的字符串放在HTTP request中的header authorization域里发送给服务端,服务端收到后进行解码,获取用户名及密码,然后进行用户身份的签权过程


10. APIServer授权管理
1. alwaysDeny:表示拒绝所有的请求,用于测试
2. alwaysallow:允许接收所有请求,如果集群不需要授权流程,就用这个策略
3. ABAC:基于属性的访问控制,表示使用用户配置的授权规则对用户请求进行匹配的控制
4. webhook:调用外部rest服务队用户进行授权
5. RBAC:基于角色的访问控制

11. kubernetes API概述 
    kubernetes中各种资源的数据通过该API接口被提交到后端的持久化存储(etcd)中,kubernetes集群中的各部件直接通过该API接口实现解耦合,同时kubernetes集群中一个重要且便捷的管理工具kubectl也是通过访问该API接口实现其强大的管理功能。
    kubernetes API的访问包含3个方面(使用java程序jersey)1. 指明访问资源的类型
2. 访问时的一些选项,比如命令空间,对象的名称,过滤方式(标签和域),子目录,访问的目标是否是代理和是否用watch方式访问等。
3. 访问的方法,比如增,删,改,查
12.