k8s认证及serviceAccount、userAccount

1.概述

用kubectl向apiserver发起的命令,采用的是http方式,K8s支持多版本并存.

kubectl的认证信息存储在~/.kube/config,所以用curl无法直接获取apis中的信息,可以采用代理方式

kubectl proxy --port=8080
# HTTP request action,如get,post,put,delete,
# 这些action映射到k8s中,有:get,list,create,udate,patch,watch,proxy,redirect,delete
curl http://127.0.0.1:8080/apis/apps/v1/namespaces/kube-system/deployments

kubectl describe svc kubernetes
Name:              kubernetes
Namespace:         default
Labels:            component=apiserver
                   provider=kubernetes
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP:                10.96.0.1
Port:              https  443/TCP
TargetPort:        6443/TCP
Endpoints:         10.0.0.10:6443
Session Affinity:  None
Events:            <none>

10.96.0.1是kubernetes apiserver的地址,实现了通过10.96.0.1访问10.0.0.10:6443
# serviceAccount已经被替换成serviceAccountName
# apiServer验证用户和pod,它俩分别使用userAccount和serviceAccount
kubectl create  serviceaccount  mysa -o yaml --dry-run
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: null
  name: mysa

# 创建其它资源时,可以参考系统标准的模板
kubectl get pods myapp-1 -o yaml --export

2.创建serviceAccount

kubectl create serviceaccount admin
kubectl get sa
NAME      SECRETS   AGE
admin     1         10s
default   1         15d
# 这个sa目前只存在于default名称空间
kubectl describe sa admin
kubectl get secret
NAME                   TYPE                                  DATA   AGE
admin-token-bqcpl      kubernetes.io/service-account-token   3      53s
default-token-g7t2x    kubernetes.io/service-account-token   3      15d

# 用配置清单把serviceaccount和pod绑定起来,这表示该pod使用自定义的验证信息admin
cat pod-sa-demo.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-sa-demo
  namespace: default
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    ports:
    - name: http
      containerPort: 80
  serviceAccountName: admin 

# kubeconfig是客户端连接apiserver时使用的认证格式的配置文件
# context定义哪个集群被哪个用户访问,current-context当前是用的是哪个context
kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://10.0.0.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

3.创建useraccount

# 证书存放位置
cd /etc/kubernetes/pki/
# 做一个私钥,生成lixiang.key
(umask 077; openssl genrsa -out lixiang.key 2048)
# 基于私钥生成一个证书,生成lixiang.csr,CN就是用户账号名
openssl req -new -key lixiang.key -out lixiang.csr -subj "/CN=lixiang"
# 签发证书,生成lixiang.crt,-days:表示证书的过期时间,x509:生成x509格式证书 
openssl  x509 -req -in lixiang.csr -CA ca.crt -CAkey ca.key  -CAcreateserial -out lixiang.crt -days 365
# 查看证书内容
openssl x509 -in lixiang.crt -text -noout
# 把用户账户信息添加到当前集群中,embed-certs=true隐藏证书信息
kubectl config set-credentials lixiang --client-certificate=lixiang.crt --client-key=lixiang.key --embed-certs=true
# 设置该用户可以访问kubernetes集群
kubectl config set-context lixiang@kubernetes --cluster=kubernetes --user=lixiang
# 切换到lixiang用户,登录k8s,可以看到lixiang用户没有管理器权限
kubectl config use-context lixiang@kubernetes
# 切回k8s管理员
kubectl config use-context kubernetes-admin@kubernetes
# 创建一个新的k8s集群,--kubeconfig:指定集群配置文件存放位置
kubectl config set-cluster mycluster --kubeconfig=/tmp/test.conf --server="https://127.0.0.1:6443" \
--certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true
kubectl config view --kubeconfig=/tmp/test.conf

 

参考博客:http://blog.itpub.net/28916011/viewspace-2215100/

 

转载于:https://www.cnblogs.com/fawaikuangtu123/p/11295376.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
), 5, self) search_result_table.setHorizontalHeaderLabels(["ID", "类型", "支出", "关键字", "在 Kubernetes 中,可以使用以下步骤来创建用户、组和 ServiceAccount: 创建用户和组: 1. 通过 ssh 连日期"]) search_result_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) row = 0 for record in matched接到 Kubernetes 集群上的一台主节点。 2. 执行以下命令创建一个新的用户: ``` sudo user_records: for i in range(len(record)): search_result_table.setItem(row, i, QTableWidgetItem(str(record[i]))) row += add -m <username> ``` 3. 执行以下命令创建一个新的组: ``` sudo groupadd <groupname1 search_result_layout.addWidget(search_result_table) search_result_widget.setWindowTitle("查询结果") search_result_widget.show() if __> ``` 4. 执行以下命令将用户添加到组中: ``` sudo usermod -a -G <groupnamename__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_> <username> ``` 创建 ServiceAccount: 1. 执行以下命令创建一个新的 ServiceAccount: ``` kubectl()) ``` 这个代码实现了你所要求的所有功能。在这个代码中,我们使用了PyQt5 create serviceaccount <serviceaccount-name> ``` 2. 执行以下命令获取 ServiceAccount 的详细信息: ``` kubectl来创建GUI界面,使用了QCalendarWidget来显示日历,使用了QTimeEdit来显示时间。我们通过连接clicked describe sa <serviceaccount-name> ``` 在输出中,可以看到 ServiceAccount 的名称和自动生成的 Secret 名称。 信号和槽来更新当前日期和时间。我们还使用了QLineEdit、QComboBox和QPushButton等控件来实现记3. 可以使用以下命令将 ServiceAccount 绑定到一个或多个角色: ``` kubectl create rolebinding账和查询功能。我们使用了QTableWidget来显示记账和查询结果,并使用了CSV文件来保存记账数据 <binding-name> --role=<role-name> --serviceaccount=<namespace>:<serviceaccount-name> ``` 其中,`<。我们使用了defaultdict来计算每种类型的总支出,并使用了QMessageBox来显示查询结果。 希望binding-name>` 是绑定的名称,`<role-name>` 是角色的名称,`<namespace>` 是 ServiceAccount 所在这个代码能够对你有所帮助,祝你好运!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值