【问题标题】:kubectl returns "Unable to connect to the server: x509: certificate is valid for..."kubectl 返回“无法连接到服务器:x509:证书对...有效”
【发布时间】:2021-11-16 20:49:16
【问题描述】:

我在远程机器 (k8_host) 上启动了一个 minikube 实例。我正在尝试从本地机器(client_comp)连接到它。我按照here 的指示进行了设置并转移了证书。

看来我可以在 client_comp 上使用 kubectl 成功 ping,但出现证书错误:

    $ kubectl get pods
    Unable to connect to the server: x509: certificate is valid for 192.168.49.2, 10.96.0.1, 127.0.0.1, 10.0.0.1, not 192.168.1.69

当我检查 minikube 的 IP 设置时,我得到了

$minikube ip
192.168.49.2

k8_host的ip是192.168.1.69。

如果我理解正确,似乎 minikube 启动时,它会自动生成一组证书,这需要一个域。因此,它使用 k8_host 上的 minikube 本地 ip (192.168.49.2) 创建了证书。而且,当我尝试从 client_comp 连接时,它会将主机设置为 k8_host (192.168.1.69) 的网络 IP。

我需要更新证书吗?我猜,由于 nginx 设置为只传递 ssl 证书(使用流),我不能只在 nginx 配置中添加正确的主机。

为了将来参考,我在 minikube 设置过程中是否做错了什么?

供参考:

~/.kube/config(在 client_comp 上)

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: [redacted]
    server: [redacted]
  name: docker-desktop
- cluster:
    certificate-authority: home_computer/ca.crt
    server: https://192.168.1.69:51999
  name: home_computer
contexts:
- context:
    cluster: docker-desktop
    user: docker-desktop
  name: docker-desktop
- context:
    cluster: home_computer
    user: home_computer
  name: home_computer
current-context: home_computer
kind: Config
preferences: {}
users:
- name: docker-desktop
  user:
    client-certificate-data: [redacted]
    client-key-data: [redacted]
- name: home_computer
  user:
    client-certificate: home_computer/client.crt
    client-key: home_computer/client.key

~/.minikube/config(在 k8 主机上)

apiVersion: v1
clusters:
- cluster:
    certificate-authority: /home/coopers/.minikube/ca.crt
    extensions:
    - extension:
        last-update: Thu, 25 Mar 2021 22:27:27 EDT
        provider: minikube.sigs.k8s.io
        version: v1.18.1
      name: cluster_info
    server: https://192.168.49.2:8443
  name: minikube
contexts:
- context:
    cluster: minikube
    extensions:
    - extension:
        last-update: Thu, 25 Mar 2021 22:27:27 EDT
        provider: minikube.sigs.k8s.io
        version: v1.18.1
      name: context_info
    namespace: default
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /home/coopers/.minikube/profiles/minikube/client.crt
    client-key: /home/coopers/.minikube/profiles/minikube/client.key

/etc/nginx/nginx.conf(在k8主机上)

stream {
    server {
        listen 192.168.1.69:51999;
        proxy_pass 192.168.49.2:8443;
    }
}

我看到this 的问题,但它似乎有不同的根本问题。

感谢您的帮助或指导。

【问题讨论】:

    标签: kubectl minikube


    【解决方案1】:

    好的,我找到了一种方法。这是一种 deep-6-ish 方法,仅当您可以接受丢失 k8s 集群的状态时才应使用此方法。

    首先,我停止了集群,并删除了所有的集群定义:

    $ minikube stop
    $ minikube delete --all
    

    然后我重新启动了集群

    $ minikube start --apiserver-ips=<k8_host ip>
    

    这重新创建了客户端密钥和证书,但保留了相同的 ca 证书。所以,我只需要将 ~/.minikube/profiles/minikube/client.crt 和 ~/.minikube/profiles/minikube/client.key 从 k8_host 复制到 client_comp。

    希望这对将来的其他人有所帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-24
    • 2021-11-21
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 2020-10-23
    相关资源
    最近更新 更多