2017-12-26 11 views
0

teh fabric8 Javaクライアントを使用してAzureのK8sクラスタに名前空間を作成しようとしています。ここで私は何をコードK8Sで新しい名前空間を作成しようとしたときに不正なエラーが発生しました

@Before 
    public void setUpK8sClient() { 
    apiServer = ""; 
    config = new ConfigBuilder().withMasterUrl(apiServer).withUsername("user").withPassword("pass").build(); 
    client = new DefaultKubernetesClient(config); 
    System.setProperty(Config.KUBERNETES_TRUST_CERT_SYSTEM_PROPERTY, "true"); 


    } 

    @Test 
    public void getClientVersion() { 
    System.out.println("Client version "+client.getApiVersion()); 
    } 

    @Test 
    public void createNamespace() { 
    Namespace myns = client.namespaces().createNew() 
     .withNewMetadata() 
     .withName("myns") 
     .addToLabels("a", "label") 
     .endMetadata() 
     .done(); 
    System.out.println("Namespace version " + myns.getStatus()); 
    } 

これは私に次のエラーを与える

私は

o.fabric8.kubernetes.client.KubernetesClientException: Failure executing: POST at: "https://...api/v1/namespaces. Message: Unauthorized! Token may have expired! Please log-in again. Unauthorized 

を見逃したのですか?

+2

これらの資格情報を 'kubectl'を使って利用できますか? – fiunchinho

+0

ありがとう、それは私がさらに動くのを助けました。これらの資格は私にとってはうまくいかなかったので、私はビルダーで使用したトークンを与えたkubectl設定ビューを試しました。 APIからこのoAuthトークンを取得する方法はありますか? –

+0

は役に立ちましたか? – fiunchinho

答えて

1

Azureで作業しているので、the instructions to configure kubectlに従ってから、kubeconfigファイルのトークンを使用してfabric8クライアントからクラスタにアクセスすることができます。

そのトークンはおそらく管理者トークンです。そのため、ファブリッククライアントが行うことを制限する場合は、新しいクレデンシャル(ユーザー/パスワード)を作成することもできます。 API requests are tied to either a normal user or a service account, or are treated as anonymous requests

  • 通常のユーザーは、外部、独立したサービス(秘密鍵、Googleアカウントのようなサードパーティ、ユーザ名とパスワードのリストでも、ファイル)によって管理されているものとします。 Kubernetesには、通常のユーザーアカウントを表すオブジェクトはありません。
  • サービスアカウントは、特定の名前空間にバインドされたKubernetes APIによって管理されるユーザーです。サービスアカウントは、秘密として格納されている資格情報のセットに関連付けられています。手動でサービスアカウントを作成するには、kubectl create serviceaccount ACCOUNT_NAMEコマンドを使用します。これにより、現在の名前空間にサービスアカウントが作成され、APIサーバーのパブリックCAと署名付きのJSON Webトークン(JWT)を保持する関連するシークレットが作成されます。
関連する問題