kubernetes Authenticating(認証)
4982 ワード
kubernetesユーザーシステム
すべてのKubernetesクラスタには、Kubernetesによって管理されるサービスアカウントと一般ユーザーの2種類のユーザーがあります.
一般ユーザーは、外部の独立したサービスによって管理されます.管理者は、Keystoneやユーザー名、パスワードリストなどのファイルを格納する秘密鍵を配布します.通常のユーザーはAPIコールでクラスタに追加できません.
逆に、サービスアカウントはKubernetes APIによって管理されるユーザである.これらは、特定のネームスペースにバインドされ、APIサーバによって自動的に作成されるか、またはAPIコールによって手動で作成されます.サービスアカウントは、コンテナにインストールされた秘密として格納された一連の証明書にバインドされ、クラスタ内のプロセスがKubernetes APIと対話できるようにします.
kubernetes認証ポリシー
Kubernetesは、クライアント証明書、bearer tokens、認証エージェントまたはHTTP基本認証を使用して、認証プラグインを介してAPI要求を認証します.APIサーバにHTTPリクエストを発行するため、プラグインは次の属性をリクエストに関連付けようとします.
≪ユーザー名|Username|oem_src≫:エンド・ユーザーを識別する文字列.一般的な値はkube-adminまたは[email protected]. UID:エンドユーザーを識別し、ユーザー名よりも一貫性と一意の文字列を試行します.≪グループ|Group|ldap≫:一般的なユーザーのグループにユーザーを関連付ける文字列のグループ.追加フィールド:追加情報を含む文字列リストの文字列マッピング権限者が役に立つ場合があります.
X 509 Client Certsクライアント証明書認証は、
--client-ca-file = SOMEFILE
オプションをAPIサーバに渡すことによって有効になります.参照されるファイルには、APIサーバに提示されたクライアント証明書を検証するための1つ以上の証明書発行機関が含まれている必要があります.クライアント証明書を指定して検証する場合は、トピックの共通名を要求されたユーザー名として使用します.Kubernetes 1.4から、クライアント証明書は、証明書の組織フィールドを使用して、ユーザのグループメンバーシップを示すこともできる.ユーザーに複数のグループメンバーシップを含めるには、証明書に複数の組織フィールドを含めます.たとえばopenssl req -new -key jbeda.pem -out jbeda-csr.pem -subj "/CN=jbeda/O=app1/O=app2"
// jbeda-csr.pem , jbeda , app1 app2
Static Token File
コマンドラインにおいて
--token-auth-file = SOMEFILE
オプションが提供されると、APIサーバは、ファイルからベアラトークンを読み出す.現在、トークンは無期限に継続されており、APIサーバを再起動することなくトークンリストを変更できます.トークンファイルは、少なくとも3列のcsvファイルです.トークン、ユーザー名、ユーザーuid、およびオプションのグループ名です.複数のグループがある場合は、列に二重引用符を使用する必要があります.たとえば、
token,user,uid,"group1,group2,group3"
この認証ポリシーは、HTTPのHEADERSに格納されている限り、例えば
Authorization: Bearer 31ada4fd-adec-460c-809a-9e56ceb75269
Bootstrap Tokensは、新しいクラスタの簡単なブートを可能にするために、Kubernetesは、Bootstrap Tokenという動的管理Bearerタグタイプを含む.これらのトークンは、
kube-system
ネーミングスペースに秘密として格納され、そこで動的に管理および作成することができる.コントローラマネージャにはTokenCleanerコントローラがあり、ブートトークンの有効期限が切れたときにブートトークンを削除できます.このトークンは、正規表現[a-z0-9]{6}.[a-z0-9]{16}
に適合し、2つの部分からtoken IDおよびtoken secretを構成しなければならない.この方法も、例えば、HEADERSに置かれる.Authorization: Bearer 781292.db7bc3a58fc5f07e
必要条件の使用
--experimental-bootstrap-token-auth
--controllers=*,tokencleaner
Static Password Fileこの認証ポリシーを有効にする方法
--basic-auth-file=SOMEFILE
で、パスワードを有効にするとcvsファイルであることを変更できません.構成:password, user name, user id
password,user,uid,"group1,group2,group3"
使用
Authorization:Basic BASE64ENCODED(USER:PASSWORD)
Service Account Tokens
サービスアカウントは、署名されたベアラトークンを使用して、リクエストの自動有効化を検証するベリファイアです.このプラグインには2つのオプションフラグが必要です.
--service-account-key-file
は、チケット所有者トークンに署名するためのPEM符号化鍵のファイルを含む.指定されていない場合、APIサーバのTLS秘密鍵が使用されます.--service-account-lookup
がオンの場合、APIから削除されるトークンは取り消される.サービスアカウントは、通常、APIサーバによって自動的に作成され、ServiceAccountアクセスコントローラを介してクラスタ内で実行されるPodに関連付けられます.ベアラトークンは周知の場所にインストールされ、クラスタ内のプロセスがAPIサーバと通信することを可能にする.アカウントは、
PodSpec
のserviceAccountName
フィールドを使用してPodに明示的に関連付けることができる.apiVersion: apps/v1 # this apiVersion is relevant as of Kubernetes 1.9
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
spec:
replicas: 3
template:
metadata:
# ...
spec:
serviceAccountName: bob-the-bot
containers:
- name: nginx
image: nginx:1.7.9
kubectl create serviceaccount (NAME)
でserviceaccountを作成できますサービスアカウントは、ユーザー名システムを使用して認証されます.
serviceaccount:(NAMESPACE):( SERVICEACCOUNT)
で、グループシステム:serviceaccounts
およびsystem:serviceaccounts:(NAMESPACE)
に割り当てられます.endさらに詳しくはAuthenticatingリファレンスAuthenticatingへ