• kubernetes认证和serviceaccount


    Service Account 为 Pod 提供必要的身份认证。所有的 kubernetes 集群中账户分为两类,Kubernetes 管理的 serviceaccount(服务账户) 和 useraccount(用户账户)。

    kubectl 如果需要访问 apiserver 需要经过 认证,授权,准入控制 三关。
    kubectl 客户端请求的时候首先需要进行认证,认证通过后再进行授权检查,因有些增删等某些操作需要级联到其他资源或者环境,这时候就需要准入控制来检查级联环境是否有授权权限了。

    获取所有的 api version

    [root@master ~]# kubectl api-versions
    admissionregistration.k8s.io/v1beta1
    apiextensions.k8s.io/v1beta1
    apiregistration.k8s.io/v1
    apiregistration.k8s.io/v1beta1
    apps/v1
    apps/v1beta1
    apps/v1beta2
    authentication.k8s.io/v1
    authentication.k8s.io/v1beta1
    authorization.k8s.io/v1
    authorization.k8s.io/v1beta1
    autoscaling/v1
    autoscaling/v2beta1
    batch/v1
    batch/v1beta1
    certificates.k8s.io/v1beta1
    events.k8s.io/v1beta1
    extensions/v1beta1
    networking.k8s.io/v1
    policy/v1beta1
    rbac.authorization.k8s.io/v1
    rbac.authorization.k8s.io/v1beta1
    scheduling.k8s.io/v1beta1
    storage.k8s.io/v1
    storage.k8s.io/v1beta1
    v1
    

    使用 curl 访问 apiservice

    从上面可知,所有客户端访问 apiserver都需要经过验证,因而我们在服务器上面也配置了验证信息:

    # 使用 kubectl 命令的用户家目录下有 .kube/config 文件,上面有 client-certificate-data 和  client-key-data 认证信息。
    cat .kube/config 
    

    启用本地转发端口,代理访问 apiserver

    # 因为访问 apiserver 需要认证,但是在命令行中很难进行验证,我们可以通过代理的方式,对 apiserver 进行访问
    kubectl proxy --port=8080
    
    # 另起一个窗口
    # 获取所有的 namespace
    curl http://localhost:8080/api/v1/namespaces
    
    # 获取 kube-system 下所有的 deployments
    curl http://localhost:8080/apis/apps/v1/namespaces/kube-system/deployments/
    

    创建服务账户

    mkdir ~/sa
    cd sa/
    kubectl create serviceaccount admin
    
    # 查看,新增了一个 secrets
    kubectl get sa 或 kubectl get secret
    
    [klvchen@master ~]$ kubectl describe sa admin
    Name:                admin
    Namespace:           default
    Labels:              <none>
    Annotations:         <none>
    Image pull secrets:  <none>                      # 可以在这里配置私有 registry 需要的验证信息
    Mountable secrets:   admin-token-h2nhw
    Tokens:              admin-token-h2nhw
    Events:              <none>
    
    # 创建一个 pod 使用 admin 的 serviceaccount 
    vi pod-sa-demo.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-sa-demo
      namespace: default
      labels:
        app: myapp
        tier: frontend
      annotations:
        klvchen.com/created-by: "cluster admin"
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - name: http
          containerPort: 80
      serviceAccountName: admin
    
    kubectl apply -f pod-sa-demo.yaml 
    
    # 查看
    kubectl describe pods pod-sa-demo
    
    # 查看当前的用户认证
    kubectl config view
    
    # 以 root 用户执行
    cd /etc/kubernetes/pki
    
    # 配置 root 使用 kubectl 权限
    mkdir ~/.kube
    cp /etc/kubernetes/admin.conf /root/.kube/config
    
    # 创建新的密钥
    (umask 077; openssl genrsa -out klvchen.key 2048)
    
    # 创建证书请求,/CN 指定的是用户名
    openssl req -new -key klvchen.key -out klvchen.csr -subj "/CN=klvchen"
    
    # 创建证书
    openssl x509 -req -in klvchen.csr -CA ./ca.crt -CAkey ./ca.key -CAcreateserial -out klvchen.crt -days 365
    
    # 查看证书
    openssl x509 -in klvchen.crt -text -noout
    
    # 在kubeconfig配置文件中设置一个用户项
    kubectl config set-credentials klvchen --client-certificate=./klvchen.crt --client-key=./klvchen.key --embed-certs=true
    
    kubectl config set-context klvchen@kubernetes --cluster=kubernetes --user=klvchen
    
    kubectl config view
    
    # 切换用户
    kubectl config use-context klvchen@kubernetes
    
    # 此用户没有权限查看资源
    kubectl get pods 
    
    # 切换回管理员账号
    kubectl config use-context kubernetes-admin@kubernetes
    
    # 创建一个新的 kubectl 配置文件
    kubectl config set-cluster mycluster --kubeconfig=/tmp/test.conf --server="https://192.168.0.205:6443" --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true
    
    kubectl config view --kubeconfig=/tmp/test.conf 
    
  • 相关阅读:
    关于Debian中virtualbox的问题
    aptget和aptitude的区别
    Archlinux安装笔记
    数组全排列的递归方法实现
    Debian卸载iceweasel
    一起学WP7 XNA游戏开发(八. 让3d model动起来)
    一起学windows phone7开发(二十五.Toolkit 增补)
    专业windows phone7开发网站上线
    《一起学Windows phone7开发》系列视频课程
    一起学WindowsPhone7开发(二十六. Advertising)
  • 原文地址:https://www.cnblogs.com/klvchen/p/9935339.html
Copyright © 2020-2023  润新知