-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
minioのaccess-key
とaccess-secret
をonp_cluster_secrets.tf
のminio-access-secret
から取る
#1422
Conversation
これだとまだ動きません。ちょっと長くなっちゃうんですが、何が起きているかを説明します。どう変更すれば良いかは最後に述べます。 K8s には名前空間 (namespace) の概念があり、Pod などの namespace-scoped なリソースは さて、 Secret リソースも Pod リソースも namespace-scoped です。Pod の環境変数束縛の ところで、今の PR 毎にデバッグ環境を生やす一連の仕組みは、リソース達を PR 毎に違う名前空間に置くことで動作します。すると各名前空間に配置された Pod はそれぞれの名前空間に居る Secret を読みに行きます。しかし、Terraform から今入っている MinIO のシークレットは単一名前空間にしか置かれていません。 じゃあどうするんだよ、となるわけですが、要するに「複数名前空間に共有された Secret」の概念があれば、「デバッグ環境が使う全ての名前空間に共有された Secret」に MinIO の秘匿情報を Terraform から書き込み、それを Pod で読めば良いわけです。 この「複数名前空間に共有された Secret」を 殆ど 実現するものとして、サードパーティ製の k8s custom controller によって定義・実現している ClusterSecret があります。「殆ど」とここで言っているのは、実際には ClusterSecret は Secret ではなく、Secret を生成するためのテンプレートであるからです (配備先候補の名前空間が作られる度に、ClusterSecret の custom controller が Secret リソースを ClusterSecret の定義通りに作りに行くような感じ)。 Terraform の設定ファイルの下の方ですでに ClusterSecret を注入するようにしているので、結局、そのリソース名を適切に変更すると良いです。 |
なんとなく何が起きているかは把握できて、リソース名が合っているかどうかはわかりませんが修正しました。 ところで Lines 83 to 87 in 93e08a6
ここで |
と思ったんですが、多分自己解決できて、 Lines 3 to 4 in 93e08a6
このファイルの |
この つまり、この
はい、
いいえ、この Footnotes
|
- name: MINIO_ACCESS_SECRET | ||
valueFrom: | ||
secretKeyRef: | ||
name: mcserver--common--config-secrets |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
うあー、どう変更すれば良いかの説明が雑過ぎて伝わってませんでした、すみません…
まず前提として、secretKeyRef.name
は参照したい (同ネームスペース内の) Secret のリソース名を指しています。
したがって、ここを clustersecret
に変更しても、(この StatefulSet
が配置される先として指定されている) seichi-debug-minecraft-on-seichiassist-pr-{{PR番号}}
名前空間内の clustersecret
という名前の Secret
リソースを参照するだけで、その Secret
リソースが存在しないという問題は変わりません。
ClusterSecret
は Secret
とは別の kind
1 のリソースであり、リソース名である name
を変えるだけではなく、そもそもリソースの種類から変更しなければなりません。
kubernetes_secret.minio_prod_access_secret
のような kubernetes_secret
リソース 2 は、Kubernetes の Secret リソースに対応してしまうので、これは望む挙動ではありません。そこで、helm_release.onp_minecraft_mariadb_monitoring_password
のように、生の manifest を流し込むような helm_release
Terraform リソースを用いて ClusterSecret
をクラスタ内に配置することができます。
具体的な変更としては、次を行うと良いです。
resource "helm_release" "onp_minecraft_mariadb_monitoring_password" { ... }
を追加する
2. repository
/ chart
/ namespace
/ version
は 既存のリソース通りに設定する
3. name
は何かほかのものにする その SharedSecret
が何であるかを表すような名前にすると良いです
4. set_list.value.[0]
の中に SharedSecret
の manifest を書く。
metadata.name
とmatchNamespace
とdata
を既存のSharedSecret
から変更してください。それぞれ、SharedSecret
リソース自体の名前、Secret
リソースを配備する先の名前空間のパターン、Secret
に書き込む KV ペア (値は base64 エンコードされていなければならない) です。
Footnotes
-
Kubernetes では、
apiVersion
とkind
の組が「リソースの種類」を表す識別子になっています。同一名前空間内でも、apiVersion
/kind
が異なるリソースは同じ名前name
で存在することができます。例えば、minecraft
という名前のPod
(コンテナなどを束ねる最小単位を表現するリソース) とminecraft
という名前のConfigMap
(環境変数ペアのような、Map[<<環境変数に使えるような文字列>>, String]
みたいなデータを持っているリソース) は同一名前空間内に共存できます。逆に言えば、クラスタ内のリソースは、名前空間 +apiVersion
/kind
+name
の三つのデータで一意に特定できます。 ↩ -
ここでの「リソース」は Terraform 上の概念であって、 Kubernetes のそれではないです ↩
とりあえず #1422 (comment) の内容に沿って(つもりで)直しました。
|
@rito528 拡張で検出できないなら普通にCLI使って差分みたらいいのでは |
@rito528 |
@outductor |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 ありがとうございます!!!!
https://discord.com/channels/237758724121427969/959299646725951580/1175598364344205412
MINIO_DEBUG_ACCESS_KEY
が見つけられないというエラーが出ていたので、すでにminioのkey
とsecret
が定義されたonp_cluster_secrets.tf
から取得するように修正しました。mcserver--common--config-secrets
からkey
とsecret
が取得できなかった原因が分からなくて、とりあえずminioのアクセス情報が定義されているところがあったのでそこから取得するようにしてみましたが、これで動くのかどうかはわかっていないのでそもそも方向性が正しいかを見てほしいです。