<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          解決 Kubernetes 部署 Metrics Server 無法訪問 Apiserver 問題

          共 5893字,需瀏覽 12分鐘

           ·

          2021-01-15 14:55


          更多奇技淫巧歡迎訂閱博客:https://fuckcloudnative.io

          前言

          系統(tǒng)環(huán)境:

          • 部署方式:二進(jìn)制
          • Docker 版本:19.03.8
          • kubernetes 版本:1.20.1
          • 操作系統(tǒng)版本:CentOS 7.8
          • metrics server 版本:0.4.1

          參考地址:

          • 帶你玩轉(zhuǎn) kubernetes-k8s 第 54 篇[1]
          • 二進(jìn)制方式搭建 Kubernetes 1.19.3 高可用集群(五)部署 dashboard[2]

          1. 問題描述

          通過二進(jìn)制方式部署完成 kubernetes 后,部署 Metrics Server 后,查看日志出現(xiàn)下面錯誤信息:

          E1231?10:33:31.978715?1?configmap_cafile_content.go:243]?key?failed?with:
          missing?content?for?CA?bundle?"client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file"
          E1231?10:34:22.710836?1?configmap_cafile_content.go:243]?kube-system/extension-apiserver-authentication?failed?with:
          missing?content?for?CA?bundle?"client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file"
          E1231?10:34:31.978769?1?configmap_cafile_content.go:243]?key?failed?with:
          missing?content?for?CA?bundle?"client-ca::kube-system::extension-apiserver-authentication::requestheader-client-ca-file"

          根據(jù)錯誤日志信息,可以知道是缺少認(rèn)證的證書文件,導(dǎo)致不能訪問 kube-apiserver 而出現(xiàn)的問題。

          2. 問題分析

          查找資料分析原因

          經(jīng)過網(wǎng)上查找搜尋,從一篇博客中 https://www.lingjie.tech/article/2020-11-07/20 找到答案。之所以出現(xiàn)這個錯誤是因為 kube-apiserver 沒有開啟 API 聚合功能。所以需要配置 kube-apiserver 參數(shù),開啟聚合功能即可。

          什么是 API 聚合

          這里的 API 聚合機(jī)制 是 Kubernetes 1.7 版本引入的特性,能夠?qū)⒂脩魯U(kuò)展的 API 注冊到 kube-apiserver 上,仍然通過 API ServerHTTP URL 對新的 API 進(jìn)行訪問和操作。為了實現(xiàn)這個機(jī)制,Kubernetes 在 kube-apiserver 服務(wù)中引入了一個 API 聚合層(API Aggregation Layer),用于將 擴(kuò)展 API 的訪問請求轉(zhuǎn)發(fā)到用戶服務(wù)的功能。

          為了能夠?qū)⒂脩糇远x的 API 注冊到 MasterAPI Server 中,首先需要在 Master 節(jié)點所在服務(wù)器,配置 kube-apiserver 應(yīng)用的啟動參數(shù)來啟用 API 聚合 功能,參數(shù)如下:

          --runtime-config=api/all=true
          --requestheader-allowed-names=aggregator
          --requestheader-group-headers=X-Remote-Group
          --requestheader-username-headers=X-Remote-User
          --requestheader-extra-headers-prefix=X-Remote-Extra-
          --requestheader-client-ca-file=/etc/kubernetes/pki/ca.pem
          --proxy-client-cert-file=/etc/kubernetes/pki/proxy-client.pem
          --proxy-client-key-file=/etc/kubernetes/pki/proxy-client-key.pem

          如果 kube-apiserver 所在的主機(jī)上沒有運(yùn)行 kube-proxy,即無法通過服務(wù)的 ClusterIP 進(jìn)行訪問,那么還需要設(shè)置以下啟動參數(shù):

          --enable-aggregator-routing=true

          在設(shè)置完成重啟 kube-apiserver 服務(wù),就啟用 API 聚合 功能了。

          $?systemctl?daemon-reload?&&?systemctl?restart?kube-apiserver

          3. 解決問題

          按照上面的解決問題思路,我們可以開啟 API 聚合功能,然后重啟 Metrics Server 服務(wù),步驟如下:

          安裝 cfssl 工具

          ##?下載三個組件
          $?wget?https://pkg.cfssl.org/R1.2/cfssl_linux-amd64?-O?cfssl
          $?wget?https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64??-O?cfssljson
          $?wget?https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64??-O?cfssl-certinfo

          ##?復(fù)制到?bin?目錄下
          $?chmod?+x?./cfssl*
          $?mv?./cfssl*?/usr/local/bin/

          創(chuàng)建 cfssl 配置文件

          創(chuàng)建 proxy-client-csr.json 文件:

          {
          ??"CN":?"aggregator",
          ??"hosts":?[],
          ??"key":?{
          ????"algo":?"rsa",
          ????"size":?2048
          ??},
          ??"names":?[
          ????{
          ??????"C":?"CN",
          ??????"ST":?"BeiJing",
          ??????"L":?"BeiJing",
          ??????"O":?"system:masters",
          ??????"OU":?"System"
          ????}
          ??]
          }

          生成證書和秘鑰:

          ##?Master1?執(zhí)行下面命令生成證書
          $?cfssl?gencert?\
          ??-profile=kubernetes?\
          ??-ca=/etc/kubernetes/pki/ca.pem?\
          ??-ca-key=/etc/kubernetes/pki/ca-key.pem?\
          ??proxy-client-csr.json

          查看生產(chǎn)的證書:

          $?ls?-l

          -rw-r--r--?1?root?root?1017?12月?31?11:20?proxy-client.csr
          -rw-r--r--?1?root?root??236?12月?31?11:07?proxy-client-csr.json
          -rw-------?1?root?root?1675?12月?31?11:20?proxy-client-key.pem
          -rw-r--r--?1?root?root?1411?12月?31?11:20?proxy-client.pem

          將證書訪問指定的目錄下,這里我將其放到 /etc/kubernetes/pki 下:

          $?cp?*?/etc/kubernetes/pki/

          復(fù)制到其它 Master 節(jié)點服務(wù)器中:

          ##?復(fù)制到?Master2
          $?scp?*?192.168.2.11:/etc/kubernetes/pki/
          ##?復(fù)制到?Master3
          $?scp?*?192.168.2.12:/etc/kubernetes/pki/

          修改 kube-apiserver 參數(shù)

          修改三個 Master 節(jié)點中全部 kube-apiserver 配置參數(shù):

          vi?/etc/kubernetes/manifests/kube-apiserver.yaml
          ...
          --runtime-config=api/all=true?\
          --requestheader-allowed-names=aggregator?\
          --requestheader-group-headers=X-Remote-Group?\
          --requestheader-username-headers=X-Remote-User?\
          --requestheader-extra-headers-prefix=X-Remote-Extra-?\
          --requestheader-client-ca-file=/etc/kubernetes/pki/ca.pem?\
          --proxy-client-cert-file=/etc/kubernetes/pki/proxy-client.pem?\
          --proxy-client-key-file=/etc/kubernetes/pki/proxy-client-key.pem?\
          ...

          參數(shù)說明:

          • –requestheader-client-ca-file: 客戶端 CA 證書。
          • –requestheader-allowed-names: 允許訪問的客戶端 common names 列表,通過 header 中 –requestheader-username-headers 參數(shù)指定的字段獲取??蛻舳?common names 的名稱需要在 client-ca-file 中進(jìn)行設(shè)置,將其設(shè)置為空值時,表示任意客戶端都可訪問。
          • –requestheader-username-headers: 參數(shù)指定的字段獲取。
          • –requestheader-extra-headers-prefix: 請求頭中需要檢查的前綴名。
          • –requestheader-group-headers 請求頭中需要檢查的組名。
          • –requestheader-username-headers 請求頭中需要檢查的用戶名。
          • –proxy-client-cert-file: 在請求期間驗證 Aggregator 的客戶端 CA 證書。
          • –proxy-client-key-file: 在請求期間驗證 Aggregator 的客戶端私鑰。
          • –requestheader-allowed-names: 允許訪問的客戶端 common names 列表,通過 header 中 –requestheader-username-headers 參數(shù)指定的字段獲取??蛻舳?common names 的名稱需要在 client-ca-file 中進(jìn)行設(shè)置,將其設(shè)置為空值時,表示任意客戶端都可訪問。

          重啟 kube-apiserver 組件

          重啟三個 Master 服務(wù)器中全部 kube-apiserver 組件:

          $?systemctl?daemon-reload?&&?systemctl?restart?kube-apiserver

          重啟 Metrics Server 應(yīng)用

          查看已有的 metrics server 的 pod:

          $?kubectl?get?pods?-n?kube-system?|?grep?metrics-server

          metrics-server-7455879dcc-w9dw7???1/1???Running???0???1d

          刪掉已有的 metrics server 的 pod,使其重新生成新的 pod 資源:

          $?kubectl?delete?pods?metrics-server-7455879dcc-w9dw7?-n?kube-system

          輸入命令進(jìn)行驗證

          等一段時間,然后輸入下面命令進(jìn)行測試:

          [root@k8s-cluster-master-0040?~]#?kubectl?top?node
          NAME????????????????????CPU(cores)???CPU%???MEMORY(bytes)???MEMORY%
          k8s-master-10?????300m?????????3%?????4788Mi??????????30%
          k8s-master-11?????800m?????????5%?????5218Mi??????????31%
          k8s-master-12?????500m?????????4%?????4900Mi??????????31%
          k8s-woker-021?????81m??????????1%?????2930Mi??????????9%
          k8s-woker-022?????61m??????????0%?????1658Mi??????????5%
          k8s-woker-023?????62m??????????0%?????6061Mi??????????22%

          可以觀察到命令已經(jīng)可以正常使用。

          參考資料

          [1]

          帶你玩轉(zhuǎn) kubernetes-k8s 第 54 篇: https://blog.csdn.net/qq_31136839/article/details/100183026

          [2]

          二進(jìn)制方式搭建 Kubernetes 1.19.3 高可用集群(五)部署 dashboard: https://www.lingjie.tech/article/2020-11-07/20


          原文鏈接:http://www.mydlq.club/article/102/



          你可能還喜歡

          點擊下方圖片即可閱讀

          Kubernetes Pod 突然就無法掛載 Ceph RBD 存儲卷了。。

          云原生是一種信仰???



          碼關(guān)注公眾號

          后臺回復(fù)?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!



          點擊?"閱讀原文"?獲取更好的閱讀體驗!

          ??給個「在看」,是對我最大的支持??
          瀏覽 92
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  竹菊av一区二区三区四区五区 | 影音先锋成人在线 | 亚洲AV永久无码精品久久麻豆 | 草逼网123 | 豆花视频在线一区二区在线视频 |