028、k8s 安全机制
本文最后更新于 68 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

安全机制

一、Kubernetes的安全框架

  • 访问K8S集群的资源需要过三关:认证、鉴权、准入控制

  • 普通用户若要安全访问集群API Server,往往需要证书、Token 或者用户名+密码;Pod访问,需要ServiceAccount

  • K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都 支持插件方式,通过API Server配置来启用插件。

    1. Authentication
    2. Authorization
    3. Admission Control

1568010731685

二、传输安全,认证,授权,准入控制

传输安全:告别8080,迎接6443
三种客户端身份认证:

  • HTTPS 证书认证:基于CA证书签名的数字证书认证
  • HTTP Token认证:通过一个Token来识别用户
  • HTTP Base认证:用户名+密码的方式认证

Adminssion Control实际上是一个准入控制器插件列表,发送到API Server的请求都需要经过这个列表中的每个准入控制器 插件的检查,检查不通过,则拒绝请求。

1.11版本以上推荐使用的插件:

--enable-admission-plugins= \  NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds, ResourceQuota

三、使用RBAC授权

RBAC(Role-Based Access Control,基于角色的访问控制):负责完成授权(Authorization)工作。

  • 角色
    • Role:授权特定命名空间的访问权限
    • ClusterRole:授权所有命名空间的访问权限
  • 角色绑定
    • RoleBinding:将角色绑定到主体(即subject)
    • ClusterRoleBinding:将集群角色绑定到主体
  • 主体(subject)
    • User:用户
    • Group:用户组
    • ServiceAccount:服务账号

示例:授权对Pod读取权限

https://kubernetes.io/docs/reference/access-authn-authz/rbac/

角色授权

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

创建用户(CA证书为例)

cat > qinzc-csr.json <<EOF
{
  "CN": "qinzc",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing"
    }
  ]
}
EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes qinzc-csr.json | cfssljson -bare qinzc 

kubectl config set-cluster kubernetes \
  --certificate-authority=ca.pem \
  --embed-certs=true \
  --server=https://192.168.31.63:6443 \
  --kubeconfig=qinzc-kubeconfig

kubectl config set-credentials qinzc \
  --client-key=qinzc-key.pem \
  --client-certificate=qinzc.pem \
  --embed-certs=true \
  --kubeconfig=qinzc-kubeconfig

kubectl config set-context default \
  --cluster=kubernetes \
  --user=qinzc \
  --kubeconfig=qinzc-kubeconfig

kubectl config use-context default --kubeconfig=qinzc-kubeconfig

绑定角色

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: qinzc
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇