k8s学习笔记(7)--- kubernetes核心组件之apiserver详解

k8s API Server作为集群核心,提供资源对象的CRUD接口,实现认证授权、集群状态变更。它与kubelet、kube-scheduler、kube-controller-manager交互,通过REST API与集群模块通信。API Server通过安全端口6443和本地端口8080提供服务,支持多种认证、授权和准入控制策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、API Server简介

        k8s API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心

1.1 API Server的功能

  • 提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更);
  • 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd);
  • 是资源配额控制的入口
  • 拥有完备的集群安全机制;

1.2 kube-apiserver工作原理

        kube-apiserver提供了k8s的rest api,实现了认证、授权和准入控制等安全功能,同时也负责了集群状态的存储操作

  • rest api
            kube-apiserver支持同时提供https和http api,其中http api是非安全接口,不做任何认证授权机制,不建议生产环境启用,但两个接口提供的rest api格式相同。
    • https api 默认监听在6443端口(–secure-port=6443);
    • http api 默认监听在127.0.0.1的8080端口(使用参数 --insecure-port=8080);
  • 访问控制说明
            k8s api 每个请求都会经过多阶段的访问控制才会被接受,包括认证、授权及准入控制等。
    • 认证
              开启TLS情况下,所有请求都需要首先认证。k8s支持多种认证机制,并且支持同时开启多个认证插件(仅一个认证通过即可),如认证成功,则用户的username会传入授权模块做进一步的授权验证,而认证失败的请求则返回http 401 。
    • 授权
              认证之后的请求就到了授权模块,和认证类似,k8s也支持多种授权机制,并支持同时开启多个授权插件(仅一个验证通过即可)。如授权成功,则用户的请求会发送到准入控制模块做进一步的请求验证,失败的请求则返回http403。
    • 准入控制
              用来对请求做进一步的验证或添加默认参数,不同于认证和授权只关心请求的用户和操作,准入控制还会处理请求的内容,并且仅对创建、更新、删除或连接(如代理)等有效,而对读操作无效。准入控制也支持同时开启多个插件,但他们是依次调用的,只有全部插件都通过的请求才可以允许进入系统。

        kube-apiserver工作原理图如下:
在这里插入图片描述

1.3 访问kubernetes API

        k8s通过kube-apiserver这个进程提供服务,该进程运行在单个k8s-master节点上,默认有两个端口

  • 本地端口
    1.该端口用于接收HTTP请求;
    2.该端口默认值为8080,可以通过API Server的启动参数“–insecure-port”的值来修改默认值;
    3.默认的IP地址为“localhost”,可以通过启动参数“–insecure-bind-address”的值来修改该IP地址;
    4.非认证或授权的HTTP请求通过该端口访问API Server;
  • 安全端口
    1.该端口默认值为6443,可通过启动参数“–secure-port”的值来修改默认值;
    2.默认IP地址为非本地(Non-Localhost)网络端口,通过启动参数“–bind-address”设置该值;
    3.该端口用于接收HTTPS请求;
    4.用于基于Tocken文件或客户端证书及HTTP Base的认证;
    5.用于基于策略的授权;
    6.默认不启动HTTPS安全访问控制

1 直接访问api

        通过本地8080端口使用curl命令能直接获取REST api的信息,例如:

查看版本:
       curl  127.0.0.1:8080/api
查看支持的资源对象:
       curl  127.0.0.1:8080/api/v1
查看资源对象信息:
       curl  127.0.0.1:8080/api/v1/nodes
       curl  127.0.0.1:8080/api/v1/pods
       curl  127.0.0.1:8080/api/v1/services
       curl  127.0.0.1:8080/api/v1/replicationcontrollers
具体到某一个具体的对象:
       curl 127.0.0.1:8080/api/v1/nodes/10.0.0.3
指定不同namespace中的对象进行访问:
       curl  http://127.0.0.1:8080/api/v1/namespaces/default/services/php-apache
直接访问后端服务内容: 
       curl  http://127.0.0.1:8080/api/v1/namespaces/default/services/http:tomcat-service:/proxy/
       curl  http://127.0.0.1:8080/api/v1/namespaces/default/services/http:php-apache:/proxy/
其他的API信息: 
       curl 127.0.0.1:8080/apis/batch/v1

2 Kubernetes Proxy

        Kubernetes Proxy主要用于代理REST请求。 可以通过这种代理方式将API Server收到的REST请求转发到某个Node上的kubelet上,由Kubelet负责响应。

        创建一个Proxy 接口(此处创建一个监听本地10.0.0.1上的8001端口):

kubectl proxy --port=8001 --accept-hosts=‘.*‘ --address=‘10.0.0.1‘ &

        如果需要对访问的资源和源地址进行限制,可以使用正则进行匹配,限制对services进行访问:

 kubectl  proxy --port=8001  --accept-hosts=‘.*‘  --address=10.0.0.1  --reject-paths=‘^/api/v1/services‘

        通过此端口可以在外部直接访问此api代理,在新的版本中,访问方式和常规访问的URL一致:

curl  http://10.0.0.1:8001/api/v1/pods
curl  http://10.0.0.1:8001/api/v1/nodes
curl  http://10.0.0.1:8001/api/v1/services
curl  http://10.0.0.1:8001/api/v1/replicationcontrollers
curl  http://10.0.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值