46-k8s-高可用集群-證書

一、k8s集群中的證書

在k8s集群中各個(gè)組件之間通信時(shí)為了安全起見都是需要安全認(rèn)證的(通過公籽懦、私鑰)

1、證書

  • 信任的證書頒發(fā)機(jī)構(gòu):CA機(jī)構(gòu)(私鑰+公鑰)
  • Client Certificate:用于服務(wù)端認(rèn)證客戶端氛魁,例如:ETCD暮顺、ETCD Proxy厅篓、Fleetctl、docker客戶端
  • Server Certificate:服務(wù)端使用拖云,客戶端以此驗(yàn)證服務(wù)端身份贷笛,例如docker服務(wù)端
  • Peer Certificate: 雙向證書应又,用于ETCD集群成員間通信

2宙项、在kubernetes集群中需要的證書種類如下

  • ETCD:節(jié)點(diǎn)需要標(biāo)識自己服務(wù)的Server Cert,與需要Client Cert與ETCD集群其他節(jié)點(diǎn)交互株扛,當(dāng)然可以分別制定2個(gè)證書尤筐,也可以使用一個(gè)對等證書
  • Master 節(jié)點(diǎn)需要標(biāo)識 apiserver服務(wù)的server cert,也需要Client Cert連接ETCD集群洞就,這里也使用一個(gè)對等證書
  • kubectl盆繁、calico、kube-Proxy 只需要 client cert旬蟋,因此證書請求中 hosts 字段可以為空
  • kubelet 證書比較特殊油昂,不是手動生成,它由node節(jié)點(diǎn) TLS BootStrap向apiserver請求倾贰,由master節(jié)點(diǎn)的controller-manager 自動簽收冕碟,包含一個(gè) client cert 和一個(gè) server cert

3、CFSSL

  • CFSSL是CloudFlare開源的一款PKI/TLS工具匆浙。CFSSL包含一個(gè)命令行工具和一個(gè)用于簽名安寺,驗(yàn)證并且捆綁TLS證書的 HTTP API 服務(wù)

二、安裝證書工具CFSSL

1首尼、去官網(wǎng)下載cfssl-certinfo_linux-amd64 cfssljson_linux-amd64 cfssl_linux-amd64這三個(gè)組件

  • 下載核心組件

wget https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssl-certinfo_1.5.0_linux_amd64
wget https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssl_1.5.0_linux_amd64
wget https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssljson_1.5.0_linux_amd64
  • 授予執(zhí)行權(quán)限

chmod +x cfssl*
  • 批量重命名

for name in `ls cfssl*`; do mv $name ${name%_1.5.0_linux_amd64};  done
  • 移動到文件

mv cfssl* /usr/bin

三挑庶、證書生成

1、創(chuàng)建ca配置文件(ca-config.json)

  • 相當(dāng)于證書頒發(fā)機(jī)構(gòu)的工作規(guī)章制度
  • ca-config.json:可以定義多個(gè)profiles软能,分別制定不同的過期時(shí)間迎捺、使用場景等參數(shù);后續(xù)在簽名證書時(shí)可以使用某個(gè) profile
  • signing:表示該證書可用于簽名其它證書查排;生成的ca.pem證書中CA=TRUE
  • server auth:表示Client可以用該CA對server提供的證書進(jìn)行驗(yàn)證
  • lient auth:表示server可以用該CA對Client提供的證書進(jìn)行驗(yàn)證

2凳枝、 ca-config.json配置文件

vi ca-config.json

{
    "signing": {
        "default": {
            "expiry": "43800h"
        },
        "profiles": {
            "server": {
                "expiry": "43800h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth"
                ]
            },
            "client": {
                "expiry": "43800h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "client auth"
                ]
            },
            "peer": {
                "expiry": "43800h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            },
            "kubernetes": {
                "expiry": "43800h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            },
            "etcd": {
                "expiry": "43800h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}

3、csr.json:證書申請請求書雹嗦。證書機(jī)構(gòu)就會根據(jù)我們請求簽發(fā)證書

cfssl print-defaults
cfssl print-defaults csr  #使用這個(gè)命令打印模板

{
    "CN": "example.net", //瀏覽器驗(yàn)證該字段是否合法范舀,一般寫域名,非常重要.
    "hosts": [
        "example.net",
        "www.example.net"
    ],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "US",
            "ST": "CA",
            "L": "San Francisco"
        }
    ]
}

4了罪、創(chuàng)建ca證書簽名(ca-csr.json)

  • CN

    • Common Name锭环,從證書中提取該字段作為請求的用戶名(User Name);瀏覽器使用該字段驗(yàn)證網(wǎng)站是否合法
  • O

    • Organization泊藕,從證書中提取該字段作為請求用戶所屬的組(Group)辅辩;這兩個(gè)參數(shù)在后面的kubernetes啟用RBAC模式中很重要,因?yàn)樾枰O(shè)置kubelet、admin等角色權(quán)限玫锋,那么在配置證書的時(shí)候就必須配置對蛾茉,
    • 在etcd這兩個(gè)參數(shù)沒太大的重要意義
  • ca-csr.json

vi ca-csr.json
{
    "CN": "SelfSignedCa",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "shanghai",
            "O": "cfssl",
            "ST": "shanghai",
            "OU": "System"
        }
    ]
}

5、生成ca證書和私鑰

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
# ca.csr ca.pem(ca公鑰) ca-key.pem(ca私鑰,妥善保管)

6撩鹿、創(chuàng)建etcd證書簽名(etcd-csr.json)

  • etcd-csr.json
{
    "CN": "etcd",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "shanghai",
            "O": "etcd",
            "ST": "shanghai",
            "OU": "System"
        }
    ]
}

7谦炬、生成etcd證書

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd etcd-csr.json | cfssljson -bare etcd
#etcd.csr  etcd-csr.json  etcd-key.pem(etcd私鑰)  etcd.pem(etcd公鑰)

8、創(chuàng)建kubernetes證書簽名

  • kubernetes-csr.json
{
    "CN": "kubernetes",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "shanghai",
            "O": "kubernetes",
            "ST": "shanghai",
            "OU": "System"
        }
    ]
}

9节沦、生成k8s證書

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes
# kubernetes.csr  kubernetes-key.pem kubernetes.pem

10键思、校驗(yàn)證書是否合法

openssl x509 -in ca.pem -text -noout 
openssl x509 -in etcd.pem -text -noout 
openssl x509 -in kubernetes.pem -text -noout
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市甫贯,隨后出現(xiàn)的幾起案子吼鳞,更是在濱河造成了極大的恐慌,老刑警劉巖叫搁,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赔桌,死亡現(xiàn)場離奇詭異,居然都是意外死亡渴逻,警方通過查閱死者的電腦和手機(jī)疾党,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來裸卫,“玉大人仿贬,你說我怎么就攤上這事∧够撸” “怎么了茧泪?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長聋袋。 經(jīng)常有香客問我队伟,道長,這世上最難降的妖魔是什么幽勒? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任嗜侮,我火速辦了婚禮,結(jié)果婚禮上啥容,老公的妹妹穿的比我還像新娘锈颗。我一直安慰自己,他們只是感情好咪惠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布击吱。 她就那樣靜靜地躺著,像睡著了一般遥昧。 火紅的嫁衣襯著肌膚如雪覆醇。 梳的紋絲不亂的頭發(fā)上朵纷,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音永脓,去河邊找鬼袍辞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛常摧,可吹牛的內(nèi)容都是我干的搅吁。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼排宰,長吁一口氣:“原來是場噩夢啊……” “哼似芝!你這毒婦竟也來了那婉?” 一聲冷哼從身側(cè)響起板甘,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎详炬,沒想到半個(gè)月后盐类,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呛谜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年在跳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隐岛。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡猫妙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出聚凹,到底是詐尸還是另有隱情割坠,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布妒牙,位于F島的核電站彼哼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏湘今。R本人自食惡果不足惜敢朱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摩瞎。 院中可真熱鬧拴签,春花似錦、人聲如沸旗们。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚪拦。三九已至杖剪,卻和暖如春冻押,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盛嘿。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工洛巢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人次兆。 一個(gè)月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓稿茉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親芥炭。 傳聞我的和親對象是個(gè)殘疾皇子漓库,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容