[英]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.