3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ひとりでkubernetesを中心にAdvent Calendar 2021

Day 8

[k8s] secretでstringDataを使う時の注意

Posted at

前置き

kubernetesのsecretで、dataの代わりにstringDataを使うことで、base64エンコード前の文字列を直接manifestに定義することができます

例えば

encode.yaml
apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  foo: Zm9vZm9vZm9v
  bar: YmFyYmFyYmFy

string.yaml
apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
stringData:
  foo: foofoofoo
  bar: barbarbar

は同じsecretとして扱うことができます

注意

base64エンコードする手間が省けるという点では便利なstringDataですが、ちょっとおかしな挙動があります

上のstring.yamlをapplyしてgetすると

my-secret
apiVersion: v1
data:
  bar: YmFyYmFyYmFy
  foo: Zm9vZm9vZm9v
--以下省略--

このようなdataのsecretが作られます
stringDataがdataに変換されてます

で、string.yamlのbarを削除してkubectl applyします

string.yaml
apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
stringData:
  foo: foofoofoo

apply後にgetすると

my-secret
apiVersion: v1
data:
  bar: ""
  foo: Zm9vZm9vZm9v
--以下省略--

barに空文字が残ってしまいます
ちなみにencode.yamlのほうで同じ操作をすると、ちゃんとbarは消えます

更にstringDataを全部消してkubectl applyしてみます(実際にこういう操作をすることがあるかはさておき)

string.yaml
apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque

apply後にgetすると

my-secret
apiVersion: v1
data:
  bar: ""
  foo: Zm9vZm9vZm9v
--以下省略--

もはや空文字にもならない、何も変わらないという
もちろんencode.yamlで同じ操作をするとちゃんと全部消えます

なにこれ

https://github.com/kubernetes/kubernetes/issues/89938
stringDataを受け取ってdataにする処理とkubectl applyの差分処理の間で不整合が起きるみたいですね
バグと言っていいと思いますが、見た感じ今の時点で修正する予定はなさそうです

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?