繁体   English   中英

使用 ansible k8s 模块:如何使用证书进行身份验证

[英]Using ansible k8s module: how to authenticate with certificates

我正在努力部署下面的剧本(向 Openshift 3.11 集群添加命名空间):

---
- hosts: kubernetesmastergfm
  gather_facts: false
  vars:
   name_namespace: testingnamespace
  tasks:
   - name: Create a k8s namespace
     k8s:
      host: "https://{{ cluster.endpoint }}"
      ca_cert: "/etc/origin/master/ca.crt" <--WHERE IS THIS IN OPENSHIFT 3.11?
      api_key: "/etc/origin/master/admin.key"<--WHERE IS THIS IN OPENSHIFT 3.11?
      validate_certs: no
      name: pippo
      api_version: v1
      kind: Namespace
      state: present
      
      

我收到错误:

      ...
kubernetes.client.rest.ApiException: (401)
Reason: Unauthorized
HTTP response headers: HTTPHeaderDict({'Date': 'Tue, 16 Feb 2021 16:05:03 GMT', 'Content-Length': '129', 'Content-Type': 'application/json', 'Cache-Control': 'no-store'})
HTTP response body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"Unauthorized","reason":"Unauthorized","code":401}

我怀疑下面路径中的证书是错误的:/etc/origin/master/ca.crt /etc/origin/master/admin.key

欢迎任何建议。 吉安菲利普

api_key参数是ServiceAccount令牌的值。 我认为您应该将此令牌直接粘贴为api_key参数值,因为使用令牌提供文件路径似乎不起作用。

我将在一个简单的示例中描述所需的步骤,以说明它是如何工作的。

要查找与特定ServiceAccount关联的令牌名称,您可以使用:

###  kubectl describe sa <SERVICE ACCOUNT NAME> | grep "Token"

# kubectl describe sa namespace-creator | grep "Token"
Tokens:              namespace-creator-token-hs6zn

然后显示此令牌的值:

### kubectl describe secret <TOKEN NAME> | grep "token:" 

# kubectl describe secret namespace-creator-token-hs6zn | grep "token:"
token:      ey(...)3Q

最后将此令牌值作为api_key参数值传递:

---
...
  tasks:
   - name: Create a k8s namespace
     community.kubernetes.k8s:
      ...
      api_key: "ey(...)3Q"
      validate_certs: no
      ...

要找出 CA 证书所在的位置,您可以查看 API 服务器的--client-ca-file参数,例如:

# kubectl describe pod kube-apiserver-master -n kube-system | grep "client-ca-file"
      --client-ca-file=/etc/kubernetes/ssl/ca.crt
  

注意:如果您使用validate_certs: no ,则无需提供ca_cert参数。

此外,如果您想要而不是api_key ,您可以使用kubeconfig和现有 Kube.netes 配置文件的路径。

最后,我找到了另一种通过使用k8s_auth而不是k8s来验证 API (Openshift) 的方法。 该剧本应如下所示:

- hosts: localhost
  module_defaults:
    group/k8s:
      host: https://openshift-url:8443
      ca_cert: /etc/origin/master/ca.crt <<===THIS IS THE RIGHT PATH FOR OCP 3.11
  tasks:
     - name: Log in (obtain access token)
       k8s_auth:
          username: xxxx
          password: yyyy
       register: k8s_auth_results

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM