【问题标题】:What username does the kubernetes kubelet use when contacting the kubernetes API?kubernetes kubelet 在联系 kubernetes API 时使用什么用户名?
【发布时间】:2016-06-13 18:02:11
【问题描述】:

所以我一直在尝试在 kubernetes API 中实现 ABAC 授权,在我的 kube-api 清单文件中使用以下参数。

  - --authorization-mode=ABAC
  - --authorization-policy-file=/etc/kubernetes/auth/abac-rules.json

以及abac-rulse.json文件中的如下内容。

{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user":"*",         "nonResourcePath": "*", "readonly": true}}
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user":"admin",     "namespace": "*",              "resource": "*",         "apiGroup": "*"                   }}
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user":"scheduler", "apiGroup": "*", "namespace": "*", "resource": "*", "readonly": false}}
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user":"kubelet", "apiGroup": "*",   "namespace": "*", "resource": "*", "readonly": false }}

但是,kubelet 似乎无法连接到 api 服务器。我读到用户名取自用于验证连接的证书中 -subject 的 CN 字段see here。在这种情况下,这是软管的 fqdn,我也尝试过,但没有运气。

任何想法我做错了什么?

提前干杯

编辑:

我使用的是 Kubernetes 版本 1.2.2,包括 kubectl 和 hyperkube docker 镜像。

【问题讨论】:

    标签: authentication authorization kubernetes


    【解决方案1】:

    想出了答案,在此记录以供其他与 ABAC 有相同问题的人使用。

    kubelet 用户是在 worker 配置中定义的,在我的例子中是一个 yaml 文件,我存储在这里 - /etc/kubernetes/worker-kubeconfig.yaml,其内容如下所示:

    apiVersion: v1
    kind: Config
    clusters:
    - name: default
      cluster:
        server: https://10.96.17.34:8443
        certificate-authority: /etc/kubernetes/ssl/ca.pem
    users:
    - name: kubelet
      user:
        client-certificate: /etc/kubernetes/ssl/worker.pem
        client-key: /etc/kubernetes/ssl/worker-key.pem
    contexts:
    - context:
        cluster: default
        user: kubelet
      name: kubelet-context
    current-context: kubelet-context
    

    所以它连接的用户是kubelet

    在我的情况下,我使用 CN=${MINION_FQDN} 创建了我的证书,由于这与“kubelet”不匹配,因此不符合 ABAC 政策。我使用以下参数重新生成了我的证书,现在节点成功验证了:)

    # Create worker key
    openssl genrsa -out $OUT/${WORKER_HOSTNAME}/worker-key.pem 2048
    #Creating Worker CSR...
    WORKER_FQDN=${WORKER_FQDN} WORKER_IP=${WORKER_IP} openssl req -new -key $OUT/${WORKER_HOSTNAME}/worker-key.pem -out $OUT/${WORKER_HOSTNAME}/worker.csr -subj "/CN=kubelet" -config $SSL_CONFIG
    # Creating Worker Cert
    WORKER_FQDN=${WORKER_FQDN} WORKER_IP=${WORKER_IP} openssl x509 -req -in $OUT/${WORKER_HOSTNAME}/worker.csr -CA $CA/ca.pem -CAkey $CA/ca-key.pem -CAcreateserial -out $OUT/${WORKER_HOSTNAME}/worker.pem -days 365 -extensions v3_req -extfile $SSL_CONFIG
    

    其中重要的部分是:

    -subj "/CN=kubelet"
    

    希望这对其他人有所帮助。

    【讨论】:

    • 它确实帮助了我。谢谢!
    猜你喜欢
    • 2022-08-19
    • 2020-02-17
    • 2019-08-23
    • 2020-05-17
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2022-01-25
    相关资源
    最近更新 更多