首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EKS集群不提供客户端ca文件。

EKS集群不提供客户端ca文件。
EN

Stack Overflow用户
提问于 2019-01-16 23:52:51
回答 2查看 3.1K关注 0票数 2

在EKS (Kubernetes 1.11.5)中创建了一个具有多个节点组的集群,但是我注意到在extension-apiserver-authentication configmap中缺少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

AWS中的extension-apiserver-authentication configmap,

代码语言:javascript
复制
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,

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2019-07-22 04:47:53

我在使用AWS集群上的证书管理器时也遇到了这个问题。可以使用从AWS获得的证书自己注入证书。按照以下步骤处理这一问题:

获得证书

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

代码语言:javascript
复制
aws eks describe-cluster \
        --region=${AWS_DEFAULT_REGION} \
        --name=${CLUSTER_NAME} \
        --output=text \
        --query 'cluster.{certificateAuthorityData: certificateAuthority.data}' | base64 -D

注入证书

在kube-system命名空间下编辑configMap/extension身份验证:kubectl -n kube-system edit cm extension-apiserver-authentication

在data部分下,在一个名为client- CA文件的新配置条目下添加ca。例如:

代码语言:javascript
复制
  client-ca-file: |
    -----BEGIN CERTIFICATE-----
...
    -----END CERTIFICATE-----
票数 4
EN

Stack Overflow用户

发布于 2019-01-17 16:15:20

您的假设可能是正确的,我的意思是,根据apiserver源代码,您的问题可能真的与api-server在EKS中的启动方式有关,以及当缺少-客户端-ca文件选项时:

集群没有在%s中的configmap/%s中提供客户端-ca文件,因此对扩展api-服务器的客户端证书身份验证无法工作。

我想知道您是否可以自己创建一个客户端-ca,然后更新扩展-apiserver-身份验证ConfigMap。毕竟,在EKS中,我们可以访问CA (获取它的方式是这里),它可以为我们提供签署客户端证书的服务,就像GitHub页面中用示例 api-server描述的那样。

作为一项附带意见:

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

代码语言:javascript
复制
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被用作对客户端进行身份验证的方式:

代码语言:javascript
复制
apiVersion: v1
kind: Config
users:
- name: kubelet
  user:
    client-certificate: /etc/srv/kubernetes/pki/kubelet.crt
    client-key: /etc/srv/kubernetes/pki/kubelet.key
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54227124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档