当前位置: 首页 > news >正文

HCIE-kubernetes(k8s)-Authentication身份验证

1、远程登录

1、kubeconfig方式
在master上都是以kubeconfig方式登录的,并不是说有一个文件叫kubeconfig。
默认使用的配置文件是~/.kube/config 这个配置文件,而这个配置文件是通过这个文件/etc/kubernetes/admin.conf

如果在node上执行命令,也需要配置该文件,否则报错如下:
[root@node1 ~]# kubectl get node
E1103 15:42:46.225278  129198 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
E1103 15:42:46.226197  129198 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
E1103 15:42:46.228511  129198 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
E1103 15:42:46.230491  129198 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
E1103 15:42:46.232909  129198 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
The connection to the server localhost:8080 was refused - did you specify the right host or port?
可以在master拷贝一份/etc/kubernetes/admin.conf到node1
[root@master ~]# cd /etc/kubernetes
[root@master kubernetes]# scp admin.conf 10.1.1.201:~
在node1上执行命令的时候,直接指定该文件运行。
[root@node1 ~]# kubectl get node --kubeconfig=admin.conf
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   8d    v1.27.0
node1    Ready    <none>          8d    v1.27.0
node2    Ready    <none>          8d    v1.27.0
如果不想指定配置文件,可以直接配置环境变量。
[root@node1 ~]# echo 'export KUBECONFIG=admin.conf' >> /etc/profile
[root@node1 ~]# source /etc/profile
[root@node1 ~]# kubectl get node
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   8d    v1.27.0
node1    Ready    <none>          8d    v1.27.0
node2    Ready    <none>          8d    v1.27.0
这样就不需要指定配置文件了。
注意:该admin.conf文件是直接从master上拷贝过来的,所以默认具备admin管理员最大的权限的。
生产环境不建议这样操作,因为权限过大,无法保证安全性。

例如单独创建用户tom授权

1、生成私钥
[root@master kubernetes]# mkdir /ca
[root@master kubernetes]# cd /ca
[root@master ca]# openssl genrsa -out client.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
.....................................+++++
.......+++++
e is 65537 (0x010001)
[root@master ca]# ls
client.key
2、生成tom用户证书请求文件
[root@master ca]# openssl req -new -key client.key -subj "/CN=tom" -out client.csr
[root@master ca]# ls
client.csr  client.key
k8s本身使用的一些ca证书,是在/etc/kubernetes/pki/目录下
[root@master ca]# ls /etc/kubernetes/pki/
apiserver.crt              apiserver-etcd-client.key  apiserver-kubelet-client.crt  ca.crt  etcd                front-proxy-ca.key      front-proxy-client.key  sa.pub
apiserver-etcd-client.crt  apiserver.key              apiserver-kubelet-client.key  ca.key  front-proxy-ca.crt  front-proxy-client.crt  sa.key
3、为tom用户颁发证书
tom如何将请求发给k8s的ca进行证书颁发呢?使用kubernetes自带的ca为tom颁发证书。
[root@master ca]# openssl x509 -req -in client.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial  -out client.crt -days 3650
Signature ok
subject=CN = tom
Getting CA Private Key
[root@master ca]# ls
client.crt  client.csr  client.key
拷贝ca证书到当前目录
[root@master ca]# cp /etc/kubernetes/pki/ca.crt .
[root@master ca]# ls
ca.crt  client.crt  client.csr  client.key
4、创建测试命名空间及pod
[root@master ca]# kubectl create namespace hehe
namespace/hehe created
[root@master ca]# kubens hehe
Context "kubernetes-admin@kubernetes" modified.
Active namespace is "hehe".
[root@master ca]# kubectl get pod
No resources found in hehe namespace.
[root@master ca]# kubectl run pod1 --image nginx --image-pull-policy IfNotPresent --dry-run=client -o yaml > pod1.yaml
[root@master ca]# kubectl apply -f pod1.yaml
pod/pod1 created
[root@master ca]# kubectl get pod
NAME   READY   STATUS    RESTARTS   AGE
pod1   1/1     Running   0          7s
5、创建角色和授权
创建角色,使其对hehe命名空间具有get/watch/list权限
[root@master ca]# kubectl create role r1 --verb get --verb watch --verb list --resource pods -n hehe
role.rbac.authorization.k8s.io/r1 created
查看角色:[root@master ca]# kubectl get role
NAME   CREATED AT
r1     2023-11-03T09:07:10Z
详细查看:[root@master ca]# kubectl describe role r1
Name:         r1
Labels:       <none>
Annotations:  <none>
PolicyRule:Resources  Non-Resource URLs  Resource Names  Verbs---------  -----------------  --------------  -----pods       []                 []              [get watch list]
6、将角色绑定给tom用户
[root@master ca]# kubectl create rolebinding r1binding --role r1 --user tom -n hehe
rolebinding.rbac.authorization.k8s.io/r1binding created
[root@master ca]# kubectl get rolebindings.rbac.authorization.k8s.io
NAME        ROLE      AGE
r1binding   Role/r1   17s
[root@master ca]# kubectl describe rolebindings.rbac.authorization.k8s.io
Name:         r1binding
Labels:       <none>
Annotations:  <none>
Role:Kind:  RoleName:  r1
Subjects:Kind  Name  Namespace----  ----  ---------User  tom
7、编辑kuberconfig文件
官网,https://kubernetes.io/zh-cn/docs/concepts/configuration/organize-cluster-access-kubeconfig/
[root@master ca]# vim kubeabc
[root@master ca]# vim kubeabc
[root@master ca]# cat kubeabc
apiVersion: v1
kind: Configclusters:
- cluster:name: dev1users:
- name: tomcontexts:
- context:name: context1namespace: hehe
current-context: "context1"设置集群密钥信息(嵌入集群密钥)
[root@master ca]# kubectl config --kubeconfig=kubeabc set-cluster dev1 --server=https://10.1.1.200:6443 --certificate-authority=ca.crt --embed-certs=true
Cluster "dev1" set.
设置tom用户密钥信息
[root@master ca]# kubectl config --kubeconfig=kubeabc set-credentials tom --client-certificate=client.crt --client-key=client.key --embed-certs=true
User "tom" set.
设置上下文信息
[root@master ca]# kubectl config --kubeconfig=kubeabc set-context context1 --cluster=dev1 --namespace=hehe --user=tom
Context "context1" modified.
8、测试
拷贝至客户端node2并测试
[root@master ca]# scp kubeabc 10.1.1.202:~
[root@node2 ~]# kubectl get pod --kubeconfig=kubeabc
NAME   READY   STATUS    RESTARTS   AGE
pod1   1/1     Running   0          24m
这样客户端node2就以tom身份登录到k8s集群中,进行管理操作了。
[root@node2 ~]# export KUBECONFIG=kubeabc
[root@node2 ~]# kubectl get pod
NAME   READY   STATUS    RESTARTS   AGE
pod1   1/1     Running   0          26m

相关文章:

  • SpringCloud 微服务全栈体系(十)
  • leetcode_208 实现Trie(前缀树)
  • zookeeper节点类型
  • 听GPT 讲Rust源代码--library/std(13)
  • 集线器、交换机、网桥、路由器、网关
  • 如何使用Python和Matplotlib创建双Y轴动态风格折线图 | 数据可视化教程
  • C++进阶语法——STL 标准模板库(下)(Standard Template Library)【学习笔记(七)】
  • 【SpringCloud Alibaba -- Nacos】Linux 搭建 Nacos 集群
  • Vue3后台管理系统框架之时间格式化封装
  • Spring整合JUnit
  • 服务器搭建:从零开始创建自己的Spring Boot应用【含登录、注册功能】
  • 【wp】2023鹏城杯初赛 Web web1(反序列化漏洞)
  • onnx 模型加载部署运行方式
  • 词典查询工具django-mdict
  • Canoe UDS诊断技术
  • Google 是如何开发 Web 框架的
  • [nginx文档翻译系列] 控制nginx
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Android开源项目规范总结
  • FastReport在线报表设计器工作原理
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript的使用你知道几种?(上)
  • Joomla 2.x, 3.x useful code cheatsheet
  • Kibana配置logstash,报表一体化
  • PHP那些事儿
  • 技术胖1-4季视频复习— (看视频笔记)
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 漂亮刷新控件-iOS
  • 微信小程序--------语音识别(前端自己也能玩)
  • 浅谈sql中的in与not in,exists与not exists的区别
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #stm32整理(一)flash读写
  • #每日一题合集#牛客JZ23-JZ33
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (黑马C++)L06 重载与继承
  • (生成器)yield与(迭代器)generator
  • (四)模仿学习-完成后台管理页面查询
  • (转)linux下的时间函数使用
  • ***检测工具之RKHunter AIDE
  • .net framework profiles /.net framework 配置
  • .net refrector
  • .net/c# memcached 获取所有缓存键(keys)
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @RequestBody的使用
  • @RequestBody与@ResponseBody的使用
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [github配置] 远程访问仓库以及问题解决
  • [HNOI2006]鬼谷子的钱袋