microk8s、DEVOPS:无法连接到服务器:x509:证书对 <内部 IP> 有效,对 <外部 IP> 无效

Dan*_*iel 2 ubuntu kubernetes microk8s

我在 ubuntu 笔记本电脑上有一个 microk8s 集群。我想从 azure devops 管道在其上应用部署 yaml 文件。

我已经在我的 devops 中成功定义了一个 Kubernetes 服务连接,并且它通过了验证。虽然当我尝试应用 yaml 文件时,我得到了这些行

/usr/bin/kubectl apply -f /home/vsts/work/1/s/devops/deploymen.yaml -o json


##[error]Unable to connect to the server: x509: certificate is valid for 127.0.0.1, 10.152.183.1, 192.168.50.69, 172.17.0.1, 10.1.80.0, not <my external IP>
Run Code Online (Sandbox Code Playgroud)

192.168.50.69 是我网络中笔记本电脑的ip

我应该在哪里添加我的外部 IP?

编辑 :

我找到了身份验证和授权并进行了编辑, /var/snap/microk8s/current/certs/csr.conf.template因此它现在包含我的 IP。

文章说:

更改后,apiserver-kicker 会自动检测差异,生成新证书并重启apiserver。您的 DNS 服务器设置和kubeconfig文件必须适当更新。

证书颁发机构数据中的证书 /var/snap/microk8s/current/certs/ca.crt现在看起来与从 microk8s config

我还用上面提到的方式更新了kubeconfig

但仍然没有运气!

Mar*_* K. 8

我重现了您的问题,解决方案似乎是在 kubeconfig 文件中添加证书或跳过 tls 验证。

您可以通过添加insecure-skip-tls-verify: true到 kubeconfig 文件来做到这一点,使其看起来像这样:

- cluster:
    insecure-skip-tls-verify: true
    server: https://<master_ip>:<port>
Run Code Online (Sandbox Code Playgroud)

或者kubeconfig在您的 microk8s 集群上进行修改,更改server: https://127.0.0.1:16443server: https://<master_ip>:16443并将其复制到您要从中访问集群的主机。


Her*_*gon 6

解决这些问题的方法是修改模板并添加缺少的IP地址

/var/snap/microk8s/current/certs/csr.conf.template

...

[ alt_names ]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster
DNS.5 = kubernetes.default.svc.cluster.local
IP.1 = 127.0.0.1
IP.2 = 192.168.1.1
IP.100 = 192.168.1.1 # USE IP > 100
#MOREIPS

...
Run Code Online (Sandbox Code Playgroud)

当你修改这个模板文件时,microk8s 守护进程会生成一个新的 csr.conf

发生这种情况是因为如果您检查sudo cat /var/snap/microk8s/current/certs/csr.conf文件,您分配的 IP 的 ID 已被另一个 IP 占用。

要解决此冲突,必须使用更高的 ID,这将起作用