私たちのクライアントのコア チームは、トークンを取得するために Python スクリプトを実行して、client-go 認証で kubeconfig を使用しています。全員が Mac を使用しています。私は mingw64 で Windows を使用しています。スクリプトへのパスをどのように指定しようとしても (スラッシュとスラッシュ間のドライブ文字、または従来の Windows スタイル (PATH に存在する場合でも))、スクリプトを kube 構成ファイルと同じディレクトリに配置してパスを指定しなくても、 が表示されますUnable to connect to the server: getting credentials: exec: executable <our script name> not found
。CLI からパスを指定せずにこのスクリプトを実行することはできます。私は をしようとしているだけですkubectl get pods
。関連するuser:
スニペット:
- name: someName
user:
exec:
apiVersion: client.authentication.k8s.io/v1beta1
args:
- --creds
- '%userprofile%\path\to\credentials.properties'
command: path\to\script
env: null
質問: Windows の kubeconfig の exec セクションで実行可能ファイルを指定するにはどうすればよいですか?
答え1
Kubernetes client-go には、kubeconfig を使用した認証用のヘルパー メソッドがすでにあります。これには、適切な例を含む 2 つのバリアントが含まれています。
カスタムバリアントを作成する代わりに、2 つの組み込みヘルパー メソッドを使用することをお勧めします。引数を追加して、たとえば Windows 上でローカルに実行しているときはクラスター外を使用し、アプリ (コードがアプリの場合) がクラスター内のサービスとして実行されているときはクラスター内を使用するなど、2 つを切り替えることができるようにすることもできます。
答え2
Windows で kubeconfig を使用する方法に関するドキュメントはほとんどないため、試行錯誤を繰り返し、@mdaniel のコメントも少し参考にして、次の解決策を思いつきました。
1 行を含む Windows バッチ ファイルを作成し、 の下@python <path-to-script> %*
でそのファイルをフル パスで参照しました。command:
exec:
%*
Python スクリプトはパラメータを取るので、使用する必要がありました。
@
バッチ実行時に Windows がこのコマンドをコンソールにエコーしないようにします。
command: <path-to-python>\python <path-to-script>
Kubernetes がそのような名前の実行可能ファイルを見つけられないとまだ警告していたため、実行できませんでした。
また、補足として、%userprofile%
kubeconfig のように Windows 環境変数を使用する場合は、それらを一重引用符で囲んで参照する必要があります。