zoukankan      html  css  js  c++  java
  • 03-k8s认证

    k8s认证


    主要使用 RBAC授权检查机制
    认证: token ssl(双向认证加密会话)
    授权检查
    准入控制:级联操作的授权检查

    k8s采用插件的方式,每一种检查都可以通过多种方式进行。

    客户端 ---> API Server

    API Server 对用户权限的判断需要以下:
    user: username uid
    group:
    extra:

    API:
    请求路径:
    /apis/app/v1/namespaces/default/deployment
    资源对象所属的apiGroup 组可以使用kubectl explain 进行查看
    更多的api信息可以查看官方文档https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.11/

    kubectl 的实质就是将yaml文件,或者命令 转换成api请求。

    HTTP request verb
    get post put delte

    API request verb
    get list create update path watch(- w) proxy redirect deletecollection

    Resource: 资源名称
    Subresource:子资源
    namespace:名称空间
    Api group:插件的方式提供

    外部访问

    方式一:
    开启api代理

    kubectl proxy
    

    方式二:
    使用postman 带 token 进行访问

    pod 客户端

    每一个namespace 创建时会创建一个默认的serviceaccount

    创建pod时如果不指定serviceaccount,会使用namespace下默认的serviceaccount 的Secret

    Secret 挂载路径为 /var/run/secrets/kubernetes.io/serviceaccount

    可以使用kubectl describe 查看Secret的挂载路径

    # kubectl describe pod/index-api-2822468404-4oofr
    Name:        index-api-2822468404-4oofr
    Namespace:    default
    ... ...
    
    Containers:
      index-api:
       ... ...
        Volume Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-40z0x (ro)
        Environment Variables:    <none>
    ... ...
    Volumes:
    ... ...
      default-token-40z0x:
        Type:    Secret (a volume populated by a Secret)
        SecretName:    default-token-40z0x
    
    QoS Class:    BestEffort
    Tolerations:    <none>
    No events.
    

    官方go-client 地址: https://github.com/kubernetes/client-go

    RBCA

    k8s 用户类型

    • user
    • group
    • serviceaccount

    serviceaccount 创建

    kubectl create serviceaccount default-ns-admin -n default
    kubectl create rolebinding default-ns-admin --clusterrole=admin --serviceaccount=default:default-ns-admin  
    
    ## 获取serviceaccount的 token 需要用base64解密
    kubectl get secrets default-ns-admin-token-2tm4n -o jsonpath={.data.token}|base64 -d
    

    用户ssl 认证相关

    https://github.com/huruizhi/Knowledge-warehouse/blob/master/linux总结/CA证书与https讲解.md
    https://github.com/gjmzj/kubeasz/blob/master/docs/setup/01-CA_and_prerequisite.md
    

    kubeconfig 配置kubectl 连入apiServer的配置

    # kubectl config view 
    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: REDACTED
        server: https://192.168.0.200:8443
      name: kubernetes
    contexts:
    - context:
        cluster: kubernetes
        user: admin
      name: kubernetes
    current-context: kubernetes
    kind: Config
    preferences: {}
    users:
    - name: admin
      user:
        client-certificate-data: REDACTED
        client-key-data: REDACTED
    

    一个客户端可以配置连接多个集群

    context用于定义账号与集群的关系,current-context定义当前访问的集群。

    RBAC(Role-Based Access Control)

    基于角色的访问控制

    RBAC

    • role/clusterrole:
      • operations
      • objects
    • rolebinding/clusterrolebinding
      • user or service account
      • role

    role 与 rolebinding在名称空间内定义及在当前名称空间内生效。

    clusterrole 与clusterrolebinding 在集群中定义且在 整个集群内生效

    注意:也可以建立clusterrole 使用 rolebing 进行绑定。

    clusterrole 与clusterrolebinding

    • subject 类型:

    user group serviceaccount

    role clusterrole:

    • object:
      • resource group
      • resource
      • nonResourceURLs
    • action: get, list, watch, patch, delete, deletecollection

    dashboard 的认证登录

    • 认证账号类型必须是ServiceAccount 类型,使用rolebinding或者clusterrolebing 进行权限的赋予
    • 使用kubectl get secrets default-ns-admin-token-2tm4n -o jsonpath={.data.token}|base64 -d获取token
    • kubconfig 方式 是token 的封装

    使用 kubeconfig 生成 kubeconfig 文件 使用参数 --kubeconfig 指定文件

  • 相关阅读:
    nsstring字符串重组
    nssstring 转换大小写
    NSString的截取
    SEL数据类型
    protocol(协议)的一些要点
    block数据类型
    category应用(计算nssting的数量)
    category分类
    mvc购物车项目(2)
    ArrayList中存储数组时需要注意到的问题
  • 原文地址:https://www.cnblogs.com/pythonPath/p/11267386.html
Copyright © 2011-2022 走看看