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     }
KubernetesServiceCollectionExtensions.cs
复制代码

 

 

posted @   —八戒—  阅读(800)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示