EKS群集不提供客户端文件

时间:2019-01-16 23:52:52

标签: authentication kubernetes amazon-eks

在具有多个节点组的EKS(Kubernetes 1.11.5)中创建了一个群集,但是我注意到在extension-apiserver-authentication配置图中,client-ca-file键丢失了。

我认为这是由于Kubernetes API服务的启动方式引起的。还有其他人遇到这个问题吗?

在部署证书管理器时遇到了这个问题,该证书管理器使用GET https://10.100.0.1:443/api/v1/namespaces/kube-system/configmaps/extension-apiserver-authentication查询api服务器。

在GKE中,这不是问题,因为extension-apiserver-authentication configmap已经包含client-ca-file

extension-apiserver-authentication在AWS中的配置图,

apiVersion: v1
data:
  requestheader-allowed-names: '["front-proxy-client"]'
  requestheader-client-ca-file: |
    <certificate file>
  requestheader-extra-headers-prefix: '["X-Remote-Extra-"]'
  requestheader-group-headers: '["X-Remote-Group"]'
  requestheader-username-headers: '["X-Remote-User"]'
kind: ConfigMap
metadata:
  creationTimestamp: 2019-01-14T04:56:51Z
  name: extension-apiserver-authentication
  namespace: kube-system
  resourceVersion: "39"
  selfLink: /api/v1/namespaces/kube-system/configmaps/extension-apiserver-authentication
  uid: ce2b6f64-17b8-11e9-a6dd-021a269d3ce8

但是在GKE中,

apiVersion: v1
data:
  client-ca-file: |
    <client certificate file>
  requestheader-allowed-names: '["aggregator"]'
  requestheader-client-ca-file: |
    <certificate file>
  requestheader-extra-headers-prefix: '["X-Remote-Extra-"]'
  requestheader-group-headers: '["X-Remote-Group"]'
  requestheader-username-headers: '["X-Remote-User"]'
kind: ConfigMap
metadata:
  creationTimestamp: 2018-05-24T12:06:33Z
  name: extension-apiserver-authentication
  namespace: kube-system
  resourceVersion: "32"
  selfLink: /api/v1/namespaces/kube-system/configmaps/extension-apiserver-authentication
  uid: e6c0c431-5f4a-11e8-8d8c-42010a9a0191

2 个答案:

答案 0 :(得分:1)

在尝试在AWS EKS集群上使用cert-manager时,我也遇到了这个问题。可以使用从AWS CLI获得的证书自己注入证书。请按照以下步骤解决此问题:

获得证书

证书存储为Base64编码,可以使用

进行检索
aws eks describe-cluster \
        --region=${AWS_DEFAULT_REGION} \
        --name=${CLUSTER_NAME} \
        --output=text \
        --query 'cluster.{certificateAuthorityData: certificateAuthority.data}' | base64 -D

注入证书

在kube系统名称空间下编辑configMap / extension-apiserver-authentication:kubectl -n kube-system edit cm extension-apiserver-authentication

在数据部分下,将CA添加到名为client-ca-file的新配置条目下。例如:

  client-ca-file: |
    -----BEGIN CERTIFICATE-----
...
    -----END CERTIFICATE-----

答案 1 :(得分:0)

您的假设可能是正确的,我的意思是您的问题可能与EKserver源代码中的如何在EKS中初始化api-server的方式以及缺少--client-ca-file选项的方式有关。

  

集群未在%s中的configmap /%s中提供client-ca-file,因此   扩展api-server的客户端证书身份验证无法正常工作。

我想知道您是否可以自己创建一个客户端CA,然后再更新extension-apiserver-authentication ConfigMap。毕竟,在EKS中,我们可以访问CA(获取here的方式),这可以帮助我们签署客户端证书,就像在GitHub页面中使用sample api-server所述。

作为旁注:

我注意到,在EKS上,诸如kubelet之类的组件正在使用aws-iam-authenticator(集群节点上/var/lib/kubelet/kubeconfig的内容):

apiVersion: v1
kind: Config
users:
- name: kubelet
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - token
      - -i
      - eks-api-eval
      command: /usr/bin/aws-iam-authenticator
      env: null

与GKE相反,在该客户端中,client-ca被用作验证客户端的方式:

apiVersion: v1
kind: Config
users:
- name: kubelet
  user:
    client-certificate: /etc/srv/kubernetes/pki/kubelet.crt
    client-key: /etc/srv/kubernetes/pki/kubelet.key