kubectl认证 授权 准入控制
kubernetes 认证及serviceaccount(服务账号)
kubernetes中apiservice是唯一访问的入口
认证->授权->准入控制
认证方式:token ssl
kubect和node都要双向认证
K8s1.6以上增加了RBAC认证,授权检查
kuberadm是强制使用kuberadm的授权认证,这都是最高的权限进行管理
用户账号具有以下信息:
客户端->API service 用户账号 user:usernmae,uid,group,extra:
API:
Request path
/apis/apps/v1
查看版本:kubectl api-versions
它支持多版本并存
###############
本机port=8080
kubectl proxy --port=8080
[root@master ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:10248 *:*
LISTEN 0 128 127.0.0.1:10249 *:*
LISTEN 0 128 127.0.0.1:10251 *:*
LISTEN 0 128 127.0.0.1:2379 *:*
LISTEN 0 128 127.0.0.1:10252 *:*
LISTEN 0 128 127.0.0.1:2380 *:*
LISTEN 0 128 127.0.0.1:8080 *:*
LISTEN 0 128 127.0.0.1:39576 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::10250 :::*
LISTEN 0 128 :::6443 :::*
LISTEN 0 128 :::10256 :::*
8080端口已启用
curl http://localhost:8080/api/v1/namespaces
json格式的数据
curl http://localhost:8080/apis/apps/v1/namespaces/kube-system/deployments
json格式的数据的增删改查
Request path
get,post,oput,delete
HTTP request verb:
get,post,put,delete
API request verb:
get,list,create,update,patch,watch,proxy,redirect,delete.deletecollection(删除一个集合)
Resource
Subresource
Namespace
PAI group
和APIserver打交道的有两类:
1,来自集群外部的地址
2,来自集群内部的Pod
创建一个清单的快捷方法:
kubectl create serviceaccount mysa -o yaml --dry-run
备注:
命令:-o yaml可以生成yaml文件
命令:--dry-run 测试运行
也可以:
kubectl create serviceaccount mysa -o yaml --dry-run >test.yaml
利用运行的Pod生成Yaml
kubectl get pods myapp-0 -o yaml --export
查看本机的sa
[root@master ~]# kubectl get sa
NAME SECRETS AGE
default 1 8d
创建一个sa
[root@master ~]# kubectl create serviceaccount admin
serviceaccount/admin created
[root@master ~]# kubectl get sa
NAME SECRETS AGE
admin 1 2s
default 1 8d
[root@master ~]# kubectl get sa
NAME SECRETS AGE
admin 1 2s
default 1 8d
[root@master ~]# kubectl describe sa admin
Name: admin
Namespace: default
Labels: <none>
Annotations: <none>
Image pull secrets: <none> #没有指定secrets
Mountable secrets: admin-token-mnczz
Tokens: admin-token-mnczz
Events: <none>
他也会自动生成一个secret信息
用于sa连接到apiservice认证信息
但是认证不等于权限,必须有授权
[root@master ~]# kubectl get secret
NAME TYPE DATA AGE
admin-token-mnczz kubernetes.io/service-account-token 3 2m
default-token-8zzcr kubernetes.io/service-account-token 3 8d
开始自定义一个sa账号的配置文件
[root@master manifests]# cat pod-sa-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-sa-demo
namespace: default
labels:
app: myapp
tier: frontend
annotations:
node1/create-by: "cluster admin" #备注
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
serviceAccountName: admin #自定义的sa账号
NAME READY STATUS RESTARTS AGE
pod-sa-demo 1/1
查看信息:
kubectl describe pods pod-sa-demo
node1/create-by=cluster admin #已经生效了
RBAC实现:
kubectlconfig
查看配置文件
kubectl config view
[root@master manifests]# kubectl config view
apiVersion: v1
clusters: #可以访问哪个集群列表
- cluster:
certificate-authority-data: REDACTED
server: https://192.168.68.10:6443
name: kubernetes
contexts:
- context: #哪个集群被哪个账户访问
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users: #用户
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
[root@master manifests]# kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED #私密数据
server: https://192.168.68.10:6443 #访问server的路径
name: kubernetes #名字
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin #用户账户
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED #证书
client-key-data: REDACTED #私钥
###########################
创建一个字节的私钥
###########################
master节点:
cd /etc/kubernetes/pki
执行: (umask 077; openssl genrsa -out jesse.key 2048)
Generating RSA private key, 2048 bit long modulus
............................................................+++
.....+++
e is 65537 (0x10001)
[root@master pki]# ll
total 60
-rw-r--r-- 1 root root 1216 Sep 4 23:13 apiserver.crt
-rw-r--r-- 1 root root 1094 Sep 4 23:13 apiserver-etcd-client.crt
-rw------- 1 root root 1679 Sep 4 23:13 apiserver-etcd-client.key
-rw------- 1 root root 1679 Sep 4 23:13 apiserver.key
-rw-r--r-- 1 root root 1099 Sep 4 23:13 apiserver-kubelet-client.crt
-rw------- 1 root root 1675 Sep 4 23:13 apiserver-kubelet-client.key
-rw-r--r-- 1 root root 1025 Sep 4 23:13 ca.crt
-rw------- 1 root root 1679 Sep 4 23:13 ca.key
drwxr-xr-x 2 root root 162 Sep 4 23:13 etcd
-rw-r--r-- 1 root root 1025 Sep 4 23:13 front-proxy-ca.crt
-rw------- 1 root root 1679 Sep 4 23:13 front-proxy-ca.key
-rw-r--r-- 1 root root 1050 Sep 4 23:13 front-proxy-client.crt
-rw------- 1 root root 1679 Sep 4 23:13 front-proxy-client.key
-rw------- 1 root root 1675 Sep 13 14:46 jesse.key #新生成的
-rw------- 1 root root 1675 Sep 4 23:13 sa.key
-rw------- 1 root root 451 Sep 4 23:13 sa.pub
基于这个私钥生成一个证书
openssl req -new -key jesse.key -out jesse.csr -subj "/CN=jesse"
证书签署完成
[root@master pki]# openssl x509 -req -in jesse.csr -CA ./ca.crt -CAkey ./ca.key -CAcreateserial -out jesse.crt -days 365
Signature ok
subject=/CN=jesse
Getting CA Private Key
查看证书内容:
openssl x509 -in jesse.crt -text -noout
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
ea:9f:bb:ab:a7:3f:aa:b8
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=kubernetes
Validity
Not Before: Sep 13 06:57:01 2018 GMT
Not After : Sep 13 06:57:01 2019 GMT #有效期限
Subject: CN=jesse
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:9f:5a:09:35:c2:17:e7:af:28:77:10:3d:90:62:
61:26:8e:f9:fa:23:81:28:06:7b:db:bb:51:d0:46:
51:c6:03:a6:09:6d:d9:b7:96:eb:02:78:0c:86:af:
90:f8:12:bf:7c:6f:5a:ed:97:f0:1c:e0:b4:a8:6d:
2d:74:28:c2:af:1f:42:9a:10:d6:1a:e0:24:0f:a4:
4d:71:09:8c:88:5d:09:77:72:93:ec:7d:00:7e:ba:
d2:36:27:40:04:e0:c6:6f:d2:c7:19:78:28:c6:fb:
61:6a:a1:23:87:4f:2f:22:a7:75:5d:3c:89:ad:2d:
b2:9e:53:a2:3d:41:87:1f:ce:1e:35:54:f3:8a:c7:
a2:5e:22:4b:b5:a5:a2:ff:90:c3:40:a5:26:11:2d:
ce:8e:b3:49:ec:39:6e:f1:35:a3:c2:83:eb:82:45:
b1:c8:fd:d3:15:28:72:3f:36:88:a4:c1:1a:a4:f0:
c6:e0:76:5c:e2:19:14:66:99:c1:a6:53:92:89:ce:
e4:34:fb:d9:f4:9e:50:8a:73:5e:33:09:61:94:3b:
79:6d:1f:33:b0:3d:38:6a:52:b8:76:ac:1a:51:6f:
18:10:e2:7f:a5:4d:ec:b0:82:b2:7d:c1:72:03:56:
6b:cc:4e:8f:2b:86:d2:ea:c9:67:d1:c4:7a:37:06:
7f:59
Exponent: 65537 (0x10001)
Signature Algorithm: sha256WithRSAEncryption
75:7b:1d:d6:fa:a2:8d:9b:8a:2a:14:48:3d:05:38:a1:98:21:
2a:9e:50:81:c5:9f:05:88:61:20:62:34:0d:bd:9f:40:cc:b1:
fa:59:d1:a5:c1:e5:d0:1d:bb:06:22:02:21:aa:db:ea:17:7d:
60:fb:b5:02:55:fb:cb:f4:0e:8d:7b:01:38:09:ca:c3:06:32:
2b:b7:35:6c:8b:e3:3b:de:88:78:ff:c1:8c:cf:5a:18:67:67:
b2:7d:6a:da:a5:dd:1f:85:d8:0a:94:76:4b:c8:31:3b:0e:de:
3f:df:bb:74:f4:a1:be:1f:a5:dd:36:0b:84:fb:17:25:9c:14:
4c:ee:15:4f:bd:ff:fc:45:36:5d:b0:48:7e:79:15:8f:63:65:
f6:e8:ba:ef:2b:9d:75:63:1b:96:39:4d:17:7f:19:b6:c8:d9:
0a:ae:b6:88:57:32:6a:b0:0f:8c:5a:41:31:f2:14:03:a6:e6:
00:46:df:5d:5f:6e:ea:ba:08:a1:85:c5:d9:2f:de:d2:d6:56:
b0:af:3b:c7:51:35:72:f5:8e:32:c4:36:f7:5e:f7:5b:ec:2e:
60:89:1f:b2:fc:55:33:0a:81:54:3e:41:8e:4b:06:cf:c3:e5:
81:18:eb:e9:23:22:ca:08:03:25:c7:91:eb:c9:07:c3:f4:6f:
d0:db:f2:af
接下来,我们把这个信息添加到连接k8s的认证信息
kubectl config set-credentials jesse --client-certificate=./jesse.crt --client-key=./jesse.key --embed-certs=true
[root@master pki]# kubectl config set-credentials jesse --client-certificate=./jesse.crt --client-key=./jesse.key --embed-certs=true
User "jesse" set.
已经添加成功
--embed-certs=true 隐藏证书
查看是否生效
[root@master pki]# kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://192.168.68.10:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: jesse #已经生效
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
下面设置让jesse也能访问集群kubernetes
[root@master pki]# kubectl config set-context jesse@kubernetes --user=jesse
Context "jesse@kubernetes" created.
jesse@kubernetes 账户
--user=jesse 指定user为jesse
查看是否包含成功:
[root@master pki]# kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://192.168.68.10:6443
name: kubernetes
contexts:
- context:
cluster: ""
user: jesse
name: jesse@kubernetes
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: jesse
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
切换账户:
[root@master pki]# kubectl config use-context jesse@kubernetes
Switched to context "jesse@kubernetes".
#切换成功
这时候我们获取pods和nodes,都是没有权限获取的
[root@master manifests]# kubectl get pods
error: the server doesn't have a resource type "pods"
[root@master manifests]# kubectl get nodes
error: the server doesn't have a resource type "nodes"
在当前新定义一个集群:
首先要指明ca的证书
指明service地址
指明隐藏证书
指明配置文件的路径:--kubeconfig=/tmp/test.conf
如果不指定的话就在家目录下
[root@master tmp]# kubectl config set-cluster mycluster --kubeconfig=/tmp/test.conf --server="https://192.168.68.10:6443" --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true
Cluster "mycluster" set.
查看是否成功:
[root@master tmp]# kubectl config view --kubeconfig=/tmp/test.conf
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://192.168.68.10:6443
name: mycluster
contexts: []
current-context: ""
kind: Config
preferences: {}
users: []
---------------------
原文:https://blog.csdn.net/weixin_36171533/article/details/82689958
kubectl认证 授权 准入控制相关推荐
- 安全认证、准入控制、RBAC
文章目录 准入机制 一.Authentication:认证 1.https的认证 需要认证的节点 总结 二.鉴权(Authorization) API Server目前支持以下几种授权策略: RBAC ...
- K8s安全管理:认证、授权、准入控制
1. K8s安全管理:认证.授权.准入控制 k8s 对我们整个系统的认证,授权,访问控制做了精密的设置:对于 k8s 集群来说,apiserver 是整 个集群访问控制的唯一入口,我们在 k8s 集群 ...
- K8S认证、授权与准入控制(RBAC)详解
相关推荐 本文的kubernetes环境:https://blog.51cto.com/billy98/2350660 RBAC官方文档:https://kubernetes.io/docs/refe ...
- K8S-安全(认证、授权、准入控制)
文章目录 安全 认证 认证方式 各组件的认证 kubeconfig ServiceAccount(SA)(给Pod颁发证书) 认证证书相关文件 服务端证书 kublet相关证书 kube-contro ...
- k8s安全 认证 鉴权 准入控制之二:授权(Authorization)
系列文章链接 k8s安全 认证 鉴权 准入控制之一:认证(Authentication) k8s安全 认证 鉴权 准入控制之二:授权(Authorization) k8s安全 认证 鉴权 准入控制之三 ...
- kubernetes集群安全——认证、鉴权、准入控制
机制说明 Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务.API Server 是集群内部各个组件通信的中介,也是外部控制的入口.所以 Kubernetes 的 ...
- k8s-身份认证与权限 认证鉴权准入控制- 各种方式带例子-推荐-2023
# 认证 鉴权 准入控制 ACL 了解 原文:k8s认证.授权与准入控制 - 哪都通临时工 - 博客园 (cnblogs.com) 认证(Authentication):API Server 可以支持 ...
- 终端安全-准入控制AAA认证
准入控制 在加入到网络(内网)之前,需要对身份信息进行审核 byod 安全认证流程 AAA认证 认证/授权/计费()审计 计费:认证过后的登录时间或访问流量 AAA系统-包含多种设备和协议 clien ...
- k8s安全 认证 鉴权 准入控制之四:准入控制
系列文章链接 k8s安全 认证 鉴权 准入控制之一:认证(Authentication) k8s安全 认证 鉴权 准入控制之二:授权(Authorization) k8s安全 认证 鉴权 准入控制之三 ...
最新文章
- ubuntu10.10---用Apache+mod_wsgi部署python程序
- 项目经理怎么运用思维导图
- java中文乱码问题的原因是什么?怎么解决中文乱码问题?
- sql server数据库:创建数据库、建立数据库用户、为用户赋予权限
- leetcode 538. 把二叉搜索树转换为累加树 思考分析
- tensorflow没有这个参数_内存频率越高越好?如果不看这个参数,内存频率再高也没有用...
- 易语言 取自定义数据类型的大小
- Vue登录注册,并保持登录状态
- 计算机硬件 中级证,计算机硬件组装与教学方法计算机应用中级职称论文
- 判断是否是微信浏览器还是企业微信浏览器
- android 谷歌地图离线访问,Android版谷歌地图更新 新增离线浏览功能(图)
- 共阳极管的代码_共阳极数码管-共阳极数码管显示
- 对抗神经网络(python-一维数据)
- 计算机两个活动分区,硬盘无法设置活动分区,硬盘只能有一个活动分区吗
- Python 识别录音并转为文字
- 工程研发中EVT、DVT、PVT、MP等名词解释
- php裁剪上传图片生成缩略图
- 商会协会团体网站搭建模板
- Word - Word 文档如何切换简体字和繁体字?
- Python——递归:这帮小兔崽子、汉诺塔
热门文章
- Java基础 | 多态
- Android处理图片透明度并绘画图片
- Notion为什么能让我放弃手账
- 【代码开发】neuron_poker安装及简单使用
- Android 读取本地图片文件和读取图片的uri
- mysql3306端口被占用无法终止_Mysql3306端口被占用无法启动解决办法.doc
- ChatGPT45个插件列表
- 什么是数位板? 数位板,又名绘图板、绘画板、手绘板等等,是计算机输入设备的一种,通常是由一块板子和一支压感笔组成,它和手写板等作为非常规的输入产品相类似,都针对一定的使用群体。 与手写板所不同的是
- 跨浏览器的事件处理程序
- C++大法:举世闻名之BOOST大法精华浅析(三)内存管理库(小白piao分享)