k8s 创建只能管理特定命名空间资源的 kubeconfig
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了k8s 创建只能管理特定命名空间资源的 kubeconfig,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2635字,纯文字阅读大概需要4分钟。
内容图文
![k8s 创建只能管理特定命名空间资源的 kubeconfig](/upload/InfoBanner/zyjiaocheng/1144/e2c1576fe0df4ab2aed0c9f4ed94a3d5.jpg)
目标
- 创建新命名空间 tommy
- 创建只能管理 tommy 命名空间下资源的 kubeconfig
步骤
创建密钥
openssl genrsa -out tommy.key 2048
为密钥创建证书签名申请(CSR)
openssl req -new -key tommy.key -out tommy.csr -subj "/CN=tommy/O=student"
# 用户名:tommy
# 组:student
将证书签名申请提交到 k8s
kubectl apply -f - <<EOF
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: tommy
spec:
groups:
- system:authenticated
request: $(openssl base64 -e -A < tommy.csr)
signerName: kubernetes.io/kube-apiserver-client
usages:
- client auth
EOF
k8s 批准签名申请,生成(已签名)证书
kubectl certificate approve tommy
导出证书
kubectl get certificatesigningrequests/tommy -o jsonpath=‘{.status.certificate}‘ | openssl base64 -d -A >tommy.crt
删除证书签名申请
rm tommy.csr
kubectl delete certificatesigningrequests/tommy
生成新的 kubeconfig
kubectl config view --raw -o json | python3 -c ‘
import base64
import json
import sys
user_name = "tommy"
with open(user_name + ".key") as f:
ckd = base64.b64encode(f.read().encode()).decode()
with open(user_name + ".crt") as f:
ccd = base64.b64encode(f.read().encode()).decode()
config = json.loads(sys.stdin.read())
for context in config["contexts"]:
if context["name"] == config["current-context"]:
context = context["context"]
break
else:
assert False
for cluster in config["clusters"]:
if cluster["name"] == context["cluster"]:
cluster = cluster["cluster"]
break
else:
assert False
sys.stdout.write(
"""apiVersion: v1
kind: Config
current-context: default
contexts:
- name: default
context:
cluster: default
user: {user_name}
namespace: {user_name}
clusters:
- name: default
cluster:
server: {s}
certificate-authority-data: {cad}
users:
- name: {user_name}
user:
client-key-data: {ckd}
client-certificate-data: {ccd}
""".format(
user_name=user_name,
s=cluster["server"],
cad=cluster["certificate-authority-data"],
ckd=ckd,
ccd=ccd,
)
)
‘ > tommy.kubeconfig
创建 tommy 命名空间
kubectl create namespace tommy
在命名空间创建 admin 角色
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: tommy
name: admin
rules:
- apiGroups:
- ‘*‘
resources:
- ‘*‘
verbs:
- ‘*‘
EOF
a)创建角色绑定,将(tommy 命名空间的)admin 角色绑定到用户 tommy 上
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
namespace: tommy
name: tommy
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: student
EOF
b)创建角色绑定,将(tommy 命名空间的)admin 角色绑定到组 student 上
a、b二选一
测试
KUBECONFIG=./tommy.kubeconfig kubectl get pods
# 输出
# No resources found in tommy namespace.
没有报错表示成功
原文:https://www.cnblogs.com/roy2220/p/14772838.html
内容总结
以上是互联网集市为您收集整理的k8s 创建只能管理特定命名空间资源的 kubeconfig全部内容,希望文章能够帮你解决k8s 创建只能管理特定命名空间资源的 kubeconfig所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。