V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
WildCat
V2EX  ›  Kubernetes

k3s/k8s 如何远程控制?比如使用 kubenav 或者 kuber app 来远程访问时, 6443 端口证书如何导出到手机上?

  •  
  •   WildCat · 2021-04-27 23:31:55 +08:00 · 2453 次点击
    这是一个创建于 1330 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想配置一下在手机上访问 Kubernetes 远程集群。现在遇到的问题是,我可以用 kubectl proxy 把 API server 代理到服务器上然后用 SSH 转发到本地。

    不过在手机上不方便如此操作。

    想问一下能否直接访问 服务器公网 IP:6443 来实现远程访问 /控制?

    目前卡在了 TLS 证书上。k3s 有一大堆证书,可以导入到 iPhone 并且信任。但是似乎没有作用。请问大概是用哪一个呢?

    12 条回复    2021-04-30 11:05:04 +08:00
    defunct9
        1
    defunct9  
       2021-04-28 10:21:33 +08:00
    k9s
    hehehu
        2
    hehehu  
       2021-04-28 10:42:24 +08:00
    kubeconfig 有个配置叫 insecure-skip-tls-verify
    WildCat
        3
    WildCat  
    OP
       2021-04-28 18:39:59 +08:00 via iPhone
    @hehehu 还是想用 tls
    kennylam777
        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. 但基本的認證就是這麼做的
    WildCat
        5
    WildCat  
    OP
       2021-04-29 10:32:35 +08:00
    @kennylam777 感谢,晚点我试试。
    我在 iPhone 上用 kubenav 或者 kuber
    kennylam777
        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/
    WildCat
        7
    WildCat  
    OP
       2021-04-29 13:09:39 +08:00
    @kennylam777 嗯,是的,kubenav 看起来很不错。

    TLS client auth 是指证书 auth 吗?我个人想 trust 自签名证书实现 TLS 加密,目前唯一疑惑的点是哪个对应哪个?

    比如:
    - 让 iPhone 系统信任哪个证书
    - 这里的 Client certificate data 和 Client key data 分别对应主节点上哪个证书



    感谢!
    kennylam777
        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)
    WildCat
        9
    WildCat  
    OP
       2021-04-30 09:22:05 +08:00
    感谢!

    我其实用的是 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
    kennylam777
        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 來跑
    kennylam777
        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
    WildCat
        12
    WildCat  
    OP
       2021-04-30 11:05:04 +08:00
    @kennylam777

    感谢您的回答!

    是的,一直都在用 k3s 来部署服务了(大部分都运行超过一年了),原来用的是 Docker Swarm 。

    kubeconfig 我导入之后,连接依旧是 tls 错误,所以很怀疑是证书问题。如果连接 https://ip:6443 的话,我个人就很怀疑是不是自签名证书不被系统信任导致的问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4457 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 05:34 · PVG 13:34 · LAX 21:34 · JFK 00:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.