簡體   English   中英

如何將用戶添加到 Kubernetes (kubectl)?

[英]How to Add Users to Kubernetes (kubectl)?

我創建了一個AWS集群Kubernetes與KOPS ,並通過能成功管理其kubectl從我的本地機器。

我可以使用kubectl config view查看當前配置,也可以直接訪問~/.kube/config存儲的狀態,例如:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://api.{CLUSTER_NAME}
  name: {CLUSTER_NAME}
contexts:
- context:
    cluster: {CLUSTER_NAME}
    user: {CLUSTER_NAME}
  name: {CLUSTER_NAME}
current-context: {CLUSTER_NAME}
kind: Config
preferences: {}
users:
- name: {CLUSTER_NAME}
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    password: REDACTED
    username: admin
- name: {CLUSTER_NAME}-basic-auth
  user:
    password: REDACTED
    username: admin

我需要讓其他用戶也能管理。 用戶指南描述了如何在另一台用戶機器上定義這些,但沒有描述如何在集群本身內實際創建用戶的憑據。 你怎么做到這一點?

此外,僅共享cluster.certificate-authority-data是否安全?

有關身份驗證的完整概述,請參閱有關身份驗證授權的官方 Kubernetes 文檔

對於用戶,理想情況下您使用 Kubernetes 的身份提供程序 (OpenID Connect)。

如果您使用 GKE / ACS,您將與相應的身份和訪問管理框架集成

如果您自托管 kubernetes(使用 kops 時就是這種情況),您可以使用coreos/dex與 LDAP/OAuth2 身份提供者集成 - 這篇詳細的 2 部分SSO for Kubernetes文章是一個很好的參考。

kops (1.10+) 現在具有內置身份驗證支持,如果您在 AWS 上,可以簡化與作為身份提供商的 AWS IAM 的集成。

對於 Dex,有一些開源 cli 客戶端,如下所示:

如果您正在尋找一種快速簡便(從長遠來看不是最安全且易於管理的)入門方式,您可能會濫用serviceaccounts - 有 2 個選項可用於控制訪問的專門策略。 (見下文)

注意,強烈建議從 1.6 基於角色的訪問控制開始! 這個答案不包括 RBAC 設置

編輯:很棒,但已經過時(2017-2018),Bitnami 關於使用 RBAC進行用戶設置的指南也可用。

啟用服務帳戶訪問的步驟是(取決於您的集群配置是否包含 RBAC 或 ABAC 策略,這些帳戶可能具有完整的管理員權限!):

編輯這是一個自動創建服務帳戶的 bash 腳本 - 請參閱以下步驟

  1. 為用戶Alice創建服務帳戶

    kubectl create sa alice
  2. 獲取相關密文

    secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
  3. 從秘密獲取ca.crt (使用帶有-D標志的 OSX base64進行解碼)

     kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D > ca.crt
  4. 從秘密獲取服務帳戶令牌

    user_token=$(kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D)
  5. 從您的 kubectl 配置(當前上下文、服務器..)中獲取信息

    # get current context c=$(kubectl config current-context) # get cluster name of context name=$(kubectl config get-contexts $c | awk '{print $3}' | tail -n 1) # get endpoint of current context endpoint=$(kubectl config view -o jsonpath="{.clusters[?(@.name == \\"$name\\")].cluster.server}")
  6. 在新機器上,按照以下步驟操作(鑒於上面檢索到的ca.cert$endpoint信息:

    1. 安裝kubectl

       brew install kubectl
    2. 設置集群(在存儲ca.crt目錄中運行)

       kubectl config set-cluster cluster-staging \\ --embed-certs=true \\ --server=$endpoint \\ --certificate-authority=./ca.crt
    3. 設置用戶憑據

       kubectl config set-credentials alice-staging --token=$user_token
    4. 定義 alice 用戶與暫存集群的組合

       kubectl config set-context alice-staging \\ --cluster=cluster-staging \\ --user=alice-staging \\ --namespace=alice
    5. 為用戶將當前上下文切換到alice-staging

       kubectl config use-context alice-staging

要使用策略控制用戶訪問(使用ABAC ),您需要創建一個policy文件(例如):

{
  "apiVersion": "abac.authorization.kubernetes.io/v1beta1",
  "kind": "Policy",
  "spec": {
    "user": "system:serviceaccount:default:alice",
    "namespace": "default",
    "resource": "*",
    "readonly": true
  }
}

在每個主節點上配置此policy.json並向 API 服務器添加policy.json --authorization-mode=ABAC --authorization-policy-file=/path/to/policy.json標志

這將允許 Alice(通過她的服務帳戶)僅對默認命名空間中的所有資源具有只讀權限。

你說 :

我需要讓其他用戶也能管理。

但是根據文檔

假設普通用戶由外部獨立服務管理。 分發私鑰的管理員、Keystone 或 Google 帳戶等用戶存儲,甚至包含用戶名和密碼列表的文件。 在這方面,Kubernetes 沒有代表普通用戶帳戶的對象。 無法通過 API 調用將普通用戶添加到集群中。

為此,您必須使用第三方工具。

== 編輯 ==

一種解決方案可能是在kubeconfig 文件中手動創建用戶條目。 文檔

# create kubeconfig entry
$ kubectl config set-cluster $CLUSTER_NICK \
    --server=https://1.1.1.1 \
    --certificate-authority=/path/to/apiserver/ca_file \
    --embed-certs=true \
    # Or if tls not needed, replace --certificate-authority and --embed-certs with
    --insecure-skip-tls-verify=true \
    --kubeconfig=/path/to/standalone/.kube/config

# create user entry
$ kubectl config set-credentials $USER_NICK \
    # bearer token credentials, generated on kube master
    --token=$token \
    # use either username|password or token, not both
    --username=$username \
    --password=$password \
    --client-certificate=/path/to/crt_file \
    --client-key=/path/to/key_file \
    --embed-certs=true \
    --kubeconfig=/path/to/standalone/.kube/config

# create context entry
$ kubectl config set-context $CONTEXT_NAME \
    --cluster=$CLUSTER_NICK \
    --user=$USER_NICK \
    --kubeconfig=/path/to/standalone/.kube/config

bitnami guide 對我有用,即使你使用 minikube。 最重要的是你的集群支持 RBAC。 https://docs.bitnami.com/kubernetes/how-to/configure-rbac-in-your-kubernetes-cluster/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM