首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kubernetes + coreos集群-替换证书

kubernetes + coreos集群-替换证书
EN

Stack Overflow用户
提问于 2016-07-17 08:36:45
回答 3查看 1.3K关注 0票数 5

我有一个coreos kubernetes集群,我从下面这篇文章开始:

AWS上的kubernetes coreos集群

TLDR;

代码语言:javascript
复制
> kube-aws init
> kube-aws render
> kube-aws up

一切都很好,我在AWS上有一个kubernetes coreos集群。在这篇文章中有一个警告说:

生产注意:不应该使用kube生成的TLS密钥和证书来部署生产Kubernetes集群。每个组件证书的有效期仅为90天,CA的有效期为365天。如果部署生产Kubernetes集群,首先考虑独立于此工具建立PKI。

因此,我希望替换默认证书,因此我遵循了以下文章:

coreos证书

TLDR;

  1. 创建以下自签名证书: ca.pem,ca-key.pem
  2. 为控制器创建证书: apiserver.pem,apiserver-key.pem
  3. 用上面创建的证书替换控制器中的证书,并重新启动控制器。
  4. 创建工作人员证书,并替换工作人员中的证书并重新启动它们。
  5. 配置kubectl使用我创建的新证书,并配置上下文和用户

我收到kubectl和集群之间的通信错误,抱怨证书

无法连接到服务器: x509:由未知权威机构签名的证书

我还试图使用指向集群DNS的kubectl签名证书,为集群设置DNS。

如何使kubectl与我的集群通信?

提前感谢

编辑:

我的~/.kube/config看起来是这样的:

代码语言:javascript
复制
apiVersion: v1
clusters:
- cluster:
    certificate-authority: /Users/Yariv/Development/workspace/bugeez/bugeez-kubernetes/credentials/ca2.pem
    server: https://kubernetes.bugeez.io
  name: bugeez
contexts:
- context:
    cluster: bugeez
    user: bugeez-admin
  name: bugeez-system
current-context: bugeez-system
kind: Config
preferences: {}
users:
- name: bugeez-admin
  user:
    client-certificate: /Users/Yariv/Development/workspace/bugeez/bugeez-kubernetes/credentials/admin2.pem
    client-key: /Users/Yariv/Development/workspace/bugeez/bugeez-kubernetes/credentials/admin-key2.pem

编辑:

我的所有证书都是由ca2.pem签名的,我还通过运行以下命令验证了这一事实:

代码语言:javascript
复制
openssl verify -CAfile ca2.pem <certificate-name>

编辑:

我认为导致错误的原因是:当我切换控制器中的键和工作人员时,看起来就像是用旧的键覆盖了我的新键。如何替换键,以及如何更改云端配置以适应更改?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-27 09:09:49

另一种对我有用的解决方案是启动一个新集群,最初使用自定义证书,而不依赖于默认的临时凭据。

按照您使用的相同的教程,我做了以下更改:

代码语言:javascript
复制
> kube-aws init
> kube-aws render

kube-aws up之前,我按照教程创建了证书。本教程的唯一问题是,它适合为现有集群创建新的证书。因此,有必要进行以下修改:

  • 这一行:$ openssl req -x509 -new -nodes -key ca-key.pem -days 10000 -out ca.pem -subj "/CN=kube-ca"需要替换为:$ openssl req -x509 -new -nodes -key ca-key.pem -days 10000 -out ca.pem
  • 在openssl.cnf文件中,删除为主主机和负载均衡器定义IP的行,因为我们还不知道它们将是什么。最后的openssl.cnf应该如下所示:

openssl.cnf

代码语言:javascript
复制
[req]
...
[req_distinguished_name]
[ v3_req ]
...
[alt_names]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local
DNS.5 = mydomain.net
IP.1 = ${K8S_SERVICE_IP} # 10.3.0.1
IP.2 = ${MASTER_IP} # 10.0.0.50

对于所有工作节点,我还使用了相同的辅助证书。

证书就绪后,输入kube-aws up

我希望这能帮你离开地面

票数 3
EN

Stack Overflow用户

发布于 2016-07-18 19:39:15

如果键确实被旧键覆盖,则需要更新CloudFormation模板以使用包含新键的新用户数据。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks.html

票数 1
EN

Stack Overflow用户

发布于 2016-07-17 11:51:46

这个错误消息基本上意味着服务器证书是由根ca签名的,HTTP客户端不知道这一点。造成这种情况的原因可能是:

  • 服务器证书(apiserver.pem)不是由在kubeconfig.yml中获得的ca签名的(在您的例子中是ca2.pem)。您可以使用:openssl verify -CAfile ca2.pem apiserver.pem验证这一点。文件apiserver.pem是通过--tls-cert-file传递给apiserver的证书(参见http://kubernetes.io/docs/admin/kube-apiserver/)。
  • 服务器证书是自签名的.这是在“如何”中完成的,但是当在apiserver中没有设置--tls-cert-file--tls-private-key-file标志时,它就会创建自签名的标志。
  • apiserver.pem不包含ca证书(请参阅--tls-cert-file标志在http://kubernetes.io/docs/admin/kube-apiserver/中的描述)。我不完全确定HTTPS服务器是否需要了解根ca,但这也可能导致问题。

此外,此错误消息也不清楚,无论这是客户端证书还是服务器证书的问题。这意味着客户端证书还必须由根ca签名。

  • 客户端证书ca由apiserver中的--client-ca-file标志设置。假设此文件也名为ca2.pem,则可以使用:openssl verify -CAfile ca2.pem admin2.pem验证客户端证书。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38419372

复制
相关文章

相似问题

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