我想配置一下在手机上访问 Kubernetes 远程集群。现在遇到的问题是,我可以用 kubectl proxy
把 API server 代理到服务器上然后用 SSH 转发到本地。
不过在手机上不方便如此操作。
想问一下能否直接访问 服务器公网 IP:6443
来实现远程访问 /控制?
目前卡在了 TLS 证书上。k3s 有一大堆证书,可以导入到 iPhone 并且信任。但是似乎没有作用。请问大概是用哪一个呢?
1
defunct9 2021-04-28 10:21:33 +08:00
k9s
|
2
hehehu 2021-04-28 10:42:24 +08:00
kubeconfig 有个配置叫 insecure-skip-tls-verify
|
4
kennylam777 2021-04-29 01:41:10 +08:00 1
你需要導入的有 3 個
1. kube-apiserver 的 CA 證書 2. kube-admin 的證書 3. kube-admin 的 private key kubeconfig 全都都有, 自己 base64 -d 解出來吧 雖然我不知道你用甚麼 client 可以指定用 kube-admin 證書來做 TLS Client auth. 但基本的認證就是這麼做的 |
5
WildCat OP @kennylam777 感谢,晚点我试试。
我在 iPhone 上用 kubenav 或者 kuber |
6
kennylam777 2021-04-29 10:44:24 +08:00
@WildCat 不說不知道還真的有 k8s mobile app, 太強了
這裡就有 kubenav 導入 kubeconfig 的方法, 原理就是 TLS client auth 的 https://docs.kubenav.io/mobile/kubeconfig/ |
7
WildCat OP @kennylam777 嗯,是的,kubenav 看起来很不错。
TLS client auth 是指证书 auth 吗?我个人想 trust 自签名证书实现 TLS 加密,目前唯一疑惑的点是哪个对应哪个? 比如: - 让 iPhone 系统信任哪个证书 - 这里的 Client certificate data 和 Client key data 分别对应主节点上哪个证书 感谢! |
8
kennylam777 2021-04-29 22:23:22 +08:00 1
不清楚 iOS app 上的信任鏈, 應該不用動到系統上的證書信任鏈吧, 其他 app 不必信任 k8s apiserver 的 CA
能導入 kubeconfig 本來就帶三個相關的 certificate-authority-data -> apiserver 的 CA, kubectl 會用這張去驗證 server 欄 https://xxx:6443 的證書 client-certificate-data -> 你的 TLS Client cert (public key) client-key-data -> 你的 TLS Client cert (private key) |
9
WildCat OP 感谢!
我其实用的是 k3s 。目前 key/证书 有点太多,没能对应的上。 - certificate-authority-data 应该对应的是 `client-kube-apiserver.crt` 或者 `client-ca.crt`? - client-certificate-data 这个对应的是那哪个呢? - client-key-data -> 是 `client-kube-apiserver.key` 吗? 目前有大概这么多证书 /keys (在 /var/lib/rancher/k3s/server 目录下): ➜ tls tree . . ├── client-admin.crt ├── client-admin.key ├── client-auth-proxy.crt ├── client-auth-proxy.key ├── client-ca.crt ├── client-ca.key ├── client-cloud-controller.crt ├── client-cloud-controller.key ├── client-controller.crt ├── client-controller.key ├── client-k3s-controller.crt ├── client-k3s-controller.key ├── client-kube-apiserver.crt ├── client-kube-apiserver.key ├── client-kube-proxy.crt ├── client-kube-proxy.key ├── client-kubelet.key ├── client-scheduler.crt ├── client-scheduler.key ├── dynamic-cert.json ├── etcd │ ├── client.crt │ ├── client.key │ ├── peer-ca.crt │ ├── peer-ca.key │ ├── peer-server-client.crt │ ├── peer-server-client.key │ ├── server-ca.crt │ ├── server-ca.key │ ├── server-client.crt │ └── server-client.key ├── request-header-ca.crt ├── request-header-ca.key ├── server-ca.crt ├── server-ca.key ├── service.key ├── serving-kube-apiserver.crt ├── serving-kube-apiserver.key ├── serving-kubelet.key └── temporary-certs ├── apiserver-loopback-client__.crt └── apiserver-loopback-client__.key |
10
kennylam777 2021-04-30 10:08:22 +08:00 1
@WildCat 看名字我就猜
certificate-authority-data: client-ca.crt client-certificate-data: client-admin.crt client-key-data: client-admin.key 要驗證就跑 openssl verify -verbose -CAfile client-ca.crt client-admin.crt 顯示 OK 就 OK client-admin.crt: OK 怪不得 CKA 要考 kube-apiserver 的證書路徑配置, 無論是 k3s 還是 kubeadm 安裝的都一樣原理, 用 kube-apiserver 來跑 |
11
kennylam777 2021-04-30 10:14:41 +08:00 1
certificate-authority-data 應該是 server-ca.crt
client-ca.crt 可以是另一個 CA 但我奇怪的是, 你都裝上了 k3s, 肯定有用過 kubectl 吧, 為甚麼好像不知道 kubeconfig 在哪裡的, 根本不用自己組證書啊..... kubenav 的官網第一句就寫著"You can also import a Kubeconfig file to add a new cluster to the kubenav app." https://docs.kubenav.io/mobile/kubeconfig/ 找出你 k3s 的 kubeconfig 吧, 沒改過就在$HOME/.kube/config |
12
WildCat OP @kennylam777
感谢您的回答! 是的,一直都在用 k3s 来部署服务了(大部分都运行超过一年了),原来用的是 Docker Swarm 。 kubeconfig 我导入之后,连接依旧是 tls 错误,所以很怀疑是证书问题。如果连接 https://ip:6443 的话,我个人就很怀疑是不是自签名证书不被系统信任导致的问题。 |