Kubernetes教程-安全性(serviceAccountName:default)-Wacher
#cd ~ #cd .kube/ #cat config #kubeconfig文件
#kubectl get pod -n kube-system #kubectl exec kube-proxy-mvmrs -n kube-system -it -- /bin/sh 容器里面的操作 #cd /run/secrets/kubernetes.io/serviceaccount/ #ls
进入容器里面
在linux下面创建一个用户并设置密码
[root@k8s-node02 ~]# useradd devuser [root@k8s-node02 ~]# passwd devuser #123456
切换devuser用户登录linux,访问pod是不行的
在master机器上
#cd /usr/local/install-k8s/ #mkdir cert #cd cert #mkdir devuser #cd devuser #vim devuser-csr.json
#vim devuser-csr.json { "CN": "devuser", #linux用户名 "hosts": [], #可以使用的主机,不写的话代表所有 "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "BeiJing", "L": "BeiJing", "O": "k8s", #组名 "OU": "System" } ] }
# 下载证书生成工具 wget https://pkg.cfss1.org/R1.2/cfss1_linux-amd64 mv cfss1_linux_amd64 /usr/local/bin/cfss1 wget https://pkg.cfss1.org/R1.2/cfss1json_linux-amd64 mv cfss1json_linux-amd64 /usr/local/bin/cfss1json_linux-amd64 wget https://pkg.cfss1.org/R1.2/cfss1-certinfo_linux-amd64 mv cfss1-certinfo_linux-amd64 /usr/local/bin/cfss1-certinfo
#cd /usr/local/bin
#chmod a+x cfss*
#cd /etc/kubernetes/pki/ #cfssl gencert -ca=ca.crt -ca-key=ca.key -profile=kubernetes /usr/local/install-k8s/cert/devuser/devuser-csr.json | cfssljson -bare devuser
设置集群参数
#cd /usr/local/install-k8s/cert/devuser/
#设置集群参数 export KUBE_APISERVER="https://192.168.4.86:6443" #master机器 kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/pki/ca.crt \ --embed-certs=true \ --server=${KUBE_APISERVER} \ --kubeconfig=devuser.kubeconfig
#设置客户端认证参数 kubectl config set-credentials devuser \ --client-certificate=/etc/kubernetes/pki/devuser.pem \ --client-key=/etc/kubernetes/pki/devuser-key.pem \ --embed-certs=true \ --kubeconfig=devuser.kubeconfig
#创建一个命名空间
#kubectl create namespace dev
#设置上下文参数,绑定某一个命名空间 kubectl config set-context kubernetes \ --cluster=kubernetes \ --user=devuser \ --namespace=dev \ --kubeconfig=devuser.kubeconfig
#cat devuser.kubeconfig
#rolebinding 名称为:devuser-admin-binding,将clusterrole的admin角色下放给用户devuser和命名空间dev
#kubectl create rolebinding devuser-admin-binding --clusterrole=admin --user=devuser --namespace=dev
[root@k8s-node02 ~]# mkdir /home/devuser/.kube #在node2机器上创建目录 [root@k8s-master01 devuser]# scp devuser.kubeconfig root@k8s-node02:/home/devuser/.kube/config #把master机器上的config文件复制到node2机器上 [root@k8s-node02 ~]# chown devuser:devuser /home/devuser/.kube/config #在node2机器上修改所有者信息为devuser
master机器
node02机器
在node02的devuser用户环境里
#cd .kube
#kubectl config use-context kubernetes --kubeconfig=config
#kubectl get pod --all-namespaces -o wide | grep nginx
k8s学习笔记之九: Service Account
什么是serviceaccount?
Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。它与User account不同 1.User account是为人设计的,而service account则是为Pod中的进程调用Kubernetes API而设计; 2.User account是跨namespace的,而service account则是仅局限它所在的namespace; 3.每个namespace都会自动创建一个default service account 4.Token controller检测service account的创建,并为它们创建secret 5.开启ServiceAccount Admission Controller后 1.每个Pod在创建后都会自动设置spec.serviceAccount为default(除非指定了其他ServiceAccout) 2.验证Pod引用的service account已经存在,否则拒绝创建 3.如果Pod没有指定ImagePullSecrets,则把service account的ImagePullSecrets加到Pod中 4.每个container启动后都会挂载该service account的token和ca.crt到/var/run/secrets/kubernetes.io/serviceaccount/
用途:Watcher程序放在k8s里面,可以直接使用service account:default,这样就可以通过api完成对k8s操作
<ItemGroup> <PackageReference Include="KubernetesClient" Version="3.0.7" /> </ItemGroup>

1 public static class KubernetesServiceCollectionExtensions 2 { 3 /// <summary> 4 /// 注入 k8s 客户端及访问器 5 /// </summary> 6 /// <param name="services"></param> 7 /// <returns></returns> 8 public static IServiceCollection AddKubernetesClient(this IServiceCollection services) 9 { 10 Check.NotNull(services, nameof(services)); 11 12 KubernetesClientConfiguration config = KubernetesClientConfiguration.IsInCluster() 13 ? KubernetesClientConfiguration.InClusterConfig() 14 : KubernetesClientConfiguration.BuildConfigFromConfigFile(); 15 services.AddSingleton<KubernetesClientConfiguration>(config); 16 services.AddSingleton<IKubernetes>((sp) => 17 { 18 KubernetesClientConfiguration kubernetesClientConfiguration = 19 sp.GetRequiredService<KubernetesClientConfiguration>(); 20 return new Kubernetes(kubernetesClientConfiguration); 21 }); 22 services.AddTransient<IShopNamespaceAccessor, ShopNamespaceAccessor>(); 23 return services; 24 } 25 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现