KubernetesのService Account

2132 ワード

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クラスタにはこの要求があることが知られている.
しかし、この例では、まず1つのノードを起動し、それから直接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には、KubernetesのAPIを呼び出してクラスタにすでに存在するノードを取得する特殊なKubernetesSeedProviderがある.ここでは、Podで実行されるプロセスがKubernetes APIを呼び出す場所、すなわちService Accountが動作する場所であることに注意してください.
コードの前に、秘密はありません.このコードを見てください.
    public List getSeeds() {
        List list = new ArrayList();
        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はKubernetesがクラスタ内で実行するためのプログラムであり、サービス発見時にAPIのアカウントを呼び出すと、アカウントのtokenがPodに直接マウントされ、プログラムが直接使用できるようになる.