Kubernetes 中的 Service Account

照例廣告放最前:Hyper 作為一家新的、小的、有夢想的、不做“Copy-to-China”的創業公司,我們歡迎想創新的、有想法的、有技術的小伙伴加盟,并且我們允許遠程辦公。

Kubernetes 中的 Service Account 是個比較難以理解的概念,什么是 Service Account,到底是做什么的?文檔中如是說——

A service account provides an identity for processes that run in a Pod. (服務帳號為 Pod 中的進程提供了一個 id)

不過,這個 Pod 中的進程的 id 是做什么用的,在用不到的時候還真讓人費腦筋。管理文檔里說得更詳細一點,但是仍然沒有提到是做什么用的。

在這種時候,一個好的例子往往勝過文檔的解釋。實際上,kubernetes 的官方示例里就有 Service Account 的應用。仔細看這個例子——在 Kubernetes 中運行 Cassandra

大家知道,在 Cassandra 這種全對稱結構的集群里,最先啟動的種子節點是最重要的,其他節點都要加入到種子節點的集群中才能保證啟動的是一個集群而不會分裂成多個集群,Cassandra、Akka 集群都有這個要求。

然而,在這個例子中,是先啟動一個節點,然后直接提高 Replica 數量,來做到多節點的,后面的節點是怎么找到種子節點的呢?仔細看例子的文檔——

However it also adds a custom SeedProvider to Cassandra. In Cassandra, a SeedProvider bootstraps the gossip protocol that Cassandra uses to find other nodes. The KubernetesSeedProvider discovers the Kubernetes API Server using the built in Kubernetes discovery service, and then uses the Kubernetes API to find new nodes

這里提到了,image 中的 Cassandra 有一個特殊的 KubernetesSeedProvider ,由它調用 Kubernetes 的 API 來獲得集群中已經存在的節點的。注意,這里就是在 Pod 中運行的進程調用 Kubernetes API 的地方,也就是 Service Account 工作的地方。

代碼之前,了無秘密,看這段代碼

    public List<InetAddress> getSeeds() {
        List<InetAddress> list = new ArrayList<InetAddress>();
        String host = "https://kubernetes.default.cluster.local";
        String serviceName = getEnvOrDefault("CASSANDRA_SERVICE", "cassandra");
        String podNamespace = getEnvOrDefault("POD_NAMESPACE", "default");
        String path = String.format("/api/v1/namespaces/%s/endpoints/", podNamespace);
        try {
            String token = getServiceAccountToken();

這里,給出了訪問的 endpoints API,并且要從本地取出 Service Account 的 Token,來獲得服務發現的信息。

綜上,Service Account 是 Kubernetes 用于集群內運行的程序,進行服務發現時調用 API 的帳號,帳號的 token 會直接掛載到 Pod 中,可以供程序直接使用。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • ?Kubernetes介紹1.背景介紹云計算飛速發展- IaaS- PaaS- SaaSDocker技術突飛猛進-...
    Zero___閱讀 14,760評論 0 21
  • kubernetes 簡介 一個迅速過一遍kubernetes 非常不錯的資源:基于Kubernetes構建Doc...
    bradyjoestar閱讀 15,299評論 2 7
  • 什么是kubernetes Kubernetes是Google開源的容器集群管理系統,其提供應用部署、維護、 擴展...
    simle天晴閱讀 1,069評論 0 0
  • 1.1 Kubernetes是什么 首先,它是一個全新的基于容器技術的分布式架構領先方案; 其次,Kubernet...
    c84f3109853b閱讀 80,654評論 1 117
  • 第3天·21天告別拖延 #玩卡不卡·每日一抽#每一位都可以通過這張卡片覺察自己: 1、直覺他叫什么名字?美娜 2、...
    趙芙蓉584閱讀 196評論 0 0