摘要:若我們將這兩個參數(shù)分別設(shè)定值為和那么啟動后,執(zhí)行命令,并詳細(xì)地查看該可以看到,該中有了兩個和,他們分別是和進(jìn)行再次加密后的數(shù)據(jù)。
kube-apiserver啟動的時候如果加了如下的參數(shù):
--admission_control=ServiceAccount
會自動生成一個apiserver.crt和apiserver.key文件,所在目錄是/var/run/kubernetes/,并且程序啟動后會發(fā)現(xiàn),有一個默認(rèn)的serviceaccount,這種模式下我們創(chuàng)建的resource都會有一個默認(rèn)的serviceaccount。
kube-controller-manager啟動時有這么兩個參數(shù):
--root-ca-file="": If set, this root certificate authority will be included in service account"s token secret. This must be a valid PEM-encoded CA bundle. --service-account-private-key-file="": Filename containing a PEM-encoded private RSA key used to sign service account tokens.
這兩個參數(shù)指定了要用哪些文件做token和根證書。若我們將這兩個參數(shù)分別設(shè)定值為apiserver.crt和apiserver.key,那么啟動后,執(zhí)行:
kubectl get secrets
命令,并詳細(xì)地查看該secret可以看到,該secret中有了兩個data:ca.crt和token,他們分別是apiserver.crt和apiserver.key進(jìn)行再次加密后的數(shù)據(jù)。
這樣,我們創(chuàng)建一個heapster,heapster所屬的serviceaccount的secret中的兩個data,會被copy到創(chuàng)建出來的容器中,我們可以進(jìn)入該容器找到兩個數(shù)據(jù)。
我們看到kubernetes的源碼中,apiserver的模塊有這么一個函數(shù),這個函數(shù)在啟動apiserver的時候會被調(diào)用:
func GenerateSelfSignedCert(host, certPath, keyPath string, alternateIPs []net.IP, alternateDNS []string) error { priv, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { return err } template := x509.Certificate{ SerialNumber: big.NewInt(1), Subject: pkix.Name{ CommonName: fmt.Sprintf("%s@%d", host, time.Now().Unix()), }, NotBefore: time.Now(), NotAfter: time.Now().Add(time.Hour * 24 * 365), KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, BasicConstraintsValid: true, } ... }
這個函數(shù)的功能是創(chuàng)建crt和key,調(diào)用這個函數(shù)的地方是kubernetescmdkube-apiserverappserver.go:
if s.TLSCertFile == "" && s.TLSPrivateKeyFile == "" { s.TLSCertFile = path.Join(s.CertDirectory, "apiserver.crt") s.TLSPrivateKeyFile = path.Join(s.CertDirectory, "apiserver.key") // TODO (cjcullen): Is PublicAddress the right address to sign a cert with? alternateIPs := []net.IP{config.ServiceReadWriteIP} alternateDNS := []string{"kubernetes.default.svc", "kubernetes.default", "kubernetes"} // It would be nice to set a fqdn subject alt name, but only the kubelets know, the apiserver is clueless // alternateDNS = append(alternateDNS, "kubernetes.default.svc.CLUSTER.DNS.NAME") if err := util.GenerateSelfSignedCert(config.PublicAddress.String(), s.TLSCertFile, s.TLSPrivateKeyFile, alternateIPs, alternateDNS); err != nil { glog.Errorf("Unable to generate self signed cert: %v", err) } else { glog.Infof("Using self-signed cert (%s, %s)", s.TLSCertFile, s.TLSPrivateKeyFile) } }
通過上一篇可以知heapster啟動后是要向apiserver做https請求的,所以crt和token必不可少。那為什么我們不直接拿這邊的crt和key去用呢?
這篇文章詳細(xì)地講了證書生成的相關(guān)知識,其中的“添加了SAN的證書生成的過程”和上文源碼中調(diào)用生成證書的地方是相似的,但是生成證書的過程中,hostname部分引用了了一個host@time.Now()作為/CN。見源代碼中這句:
Subject: pkix.Name{ CommonName: fmt.Sprintf("%s@%d", host, time.Now().Unix()), },
這句將生成crt的時候的hostname設(shè)置成了host@time,比如vm-56-65@23542343562 這樣的形式,而且每次重啟了apiserver,hostname都會變,容器內(nèi)部可不知道這個hostname,所以根本沒法訪問。
heapster內(nèi)部會記錄apiserver的幾個common name,即kubernetes源碼中的:
[]string{"kubernetes.default.svc", "kubernetes.default", "kubernetes"}
我認(rèn)為這肯定是要與kubernetes自生成的crt公用而設(shè)計的。 至于為什么不行,等有時間再研究。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/32431.html
摘要:舉個例子,我們在這種狀態(tài)下創(chuàng)建一個,然后執(zhí)行在中會發(fā)現(xiàn)有了字段,并且裝載了一個是的,這個就是我們這個下的。 注:本案例在我的部署環(huán)境下是可行的,但不保證在所有環(huán)境下都可行。我盡可能講得直白而詳細(xì),因為我自己也才剛開始接觸,已經(jīng)做過深入研究的可以瀏覽,若有什么錯誤,煩請指正,感激不盡! 我的環(huán)境: K8S1.0.0+flannel+docker1.6的分布式集群。 這里先不贅述fla...
摘要:舉個例子,我們在這種狀態(tài)下創(chuàng)建一個,然后執(zhí)行在中會發(fā)現(xiàn)有了字段,并且裝載了一個是的,這個就是我們這個下的。 注:本案例在我的部署環(huán)境下是可行的,但不保證在所有環(huán)境下都可行。我盡可能講得直白而詳細(xì),因為我自己也才剛開始接觸,已經(jīng)做過深入研究的可以瀏覽,若有什么錯誤,煩請指正,感激不盡! 我的環(huán)境: K8S1.0.0+flannel+docker1.6的分布式集群。 這里先不贅述fla...
摘要:源碼版本簡介是下的一個監(jiān)控項目,用于進(jìn)行容器集群的監(jiān)控和性能分析。基本的功能及概念介紹可以回顧我之前的一篇文章監(jiān)控之介紹。在源碼分析之前我們先介紹的實現(xiàn)流程,由上圖可以看出會從各個上獲取相關(guān)的監(jiān)控信息,然后進(jìn)行匯總發(fā)送給后臺數(shù)據(jù)庫。 源碼版本 heapster version: release-1.2 簡介 Heapster是Kubernetes下的一個監(jiān)控項目,用于進(jìn)行容器集群的監(jiān)控...
摘要:主要介紹的主要特性和一些經(jīng)驗。先從整體上看一下的一些理念和基本架構(gòu),然后從網(wǎng)絡(luò)資源管理存儲服務(wù)發(fā)現(xiàn)負(fù)載均衡高可用安全監(jiān)控等方面向大家簡單介紹的這些主要特性。集群范圍內(nèi)的監(jiān)控主要由和如構(gòu)建。 主要介紹 Kubernetes 的主要特性和一些經(jīng)驗。先從整體上看一下Kubernetes的一些理念和基本架構(gòu), 然后從網(wǎng)絡(luò)、 資源管理、存儲、服務(wù)發(fā)現(xiàn)、負(fù)載均衡、高可用、rolling upgra...
摘要:主要介紹的主要特性和一些經(jīng)驗。先從整體上看一下的一些理念和基本架構(gòu),然后從網(wǎng)絡(luò)資源管理存儲服務(wù)發(fā)現(xiàn)負(fù)載均衡高可用安全監(jiān)控等方面向大家簡單介紹的這些主要特性。集群范圍內(nèi)的監(jiān)控主要由和如構(gòu)建。 主要介紹 Kubernetes 的主要特性和一些經(jīng)驗。先從整體上看一下Kubernetes的一些理念和基本架構(gòu), 然后從網(wǎng)絡(luò)、 資源管理、存儲、服務(wù)發(fā)現(xiàn)、負(fù)載均衡、高可用、rolling upgra...
閱讀 3450·2019-08-30 15:55
閱讀 2050·2019-08-30 15:44
閱讀 1453·2019-08-30 12:47
閱讀 741·2019-08-30 11:05
閱讀 1629·2019-08-30 10:54
閱讀 655·2019-08-29 16:07
閱讀 3568·2019-08-29 14:17
閱讀 2223·2019-08-23 18:31