如何通过yaml将秘密数据设置为kubernetes秘密?
How to set secret data to kubernetes secrets by yaml?
我正在使用 kubernetes 将 rails 应用程序部署到 google 容器引擎。
关注 kubernetes 秘密文档:http://kubernetes.io/v1.1/docs/user-guide/secrets.html
我创建了一个网络控制器文件:
# web-controller.yml
apiVersion: v1
kind: ReplicationController
metadata:
labels:
name: web
name: web-controller
spec:
replicas: 2
selector:
name: web
template:
metadata:
labels:
name: web
spec:
containers:
- name: web
image: gcr.io/my-project-id/myapp:v1
ports:
- containerPort: 3000
name: http-server
env:
secret:
- secretName: mysecret
并创建了一个秘密文件:
# secret.yml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
RAILS_ENV: production
当我运行:
kubectl create -f web-controller.yml
显示:
error: could not read an encoded object from web-controller.yml: unable to load "web-controller.yml": json: cannot unmarshal object into Go value of type []v1.EnvVar
error: no objects passed to create
可能web-controller.yml
文件中的yaml格式有误。那怎么写呢?
您需要对值进行 base64
编码,并且您的密钥必须是有效的 DNS 标签,例如,将 RAILS_ENV
替换为 rails-env
。另请参阅我放在一起的这个端到端示例 here 以了解更多详细信息和具体步骤。
我们目前不支持公开为环境变量的秘密。
secret.yml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
stringData:
RAILS_ENV: production
stringData 是您所追求的简易模式版本,不过是一回事。
你会看到用于在注释中创建秘密的明文原始 yaml(如果你使用上述方法,这意味着你的注释中将有一个人类可读的秘密,如果你使用以下方法,你将拥有 base64 'd secret in your annotation),除非你跟进像这样的擦除注释命令:
kubectl apply -f secret.yml
kubectl 注释秘密 mysecret kubectl.kubernetes.io/last-applied-configuration-
(最后的 - 是说要擦除它)
kubectl get secret mysecret -n=api -o yaml
(确认)
或者你会做
Bash#回声制作 | base64
cHJvZHVjdGlvbgo=
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
RAILS_ENV: cHJvZHVjdGlvbgo=
假设我们现在按照以下步骤在部署中添加 imagepull 机密,
kubectl create secret docker-registry secret-name --docker-server=<registry-server-url> --docker-username=<Username> --docker-password=<password> --docker-email=<your-email>
现在在部署 yaml 文件中引用它,
apiVersion: v1
kind: Deployment
metadata:
name: test-deployment
spec:
containers:
- name: test-app
image: <Image-name-private>
imagePullSecrets:
- name: secret-name
或
假设您有一些 api 密钥用于访问该应用程序。
kubectl create secret generic secret-name --from-literal api-key="<your_api-key"
现在像这样在部署中引用它。
env:
- name: API_KEY
valueFrom:
secretKeyRef:
name: secret-name
key: api-key
我正在使用 kubernetes 将 rails 应用程序部署到 google 容器引擎。
关注 kubernetes 秘密文档:http://kubernetes.io/v1.1/docs/user-guide/secrets.html
我创建了一个网络控制器文件:
# web-controller.yml
apiVersion: v1
kind: ReplicationController
metadata:
labels:
name: web
name: web-controller
spec:
replicas: 2
selector:
name: web
template:
metadata:
labels:
name: web
spec:
containers:
- name: web
image: gcr.io/my-project-id/myapp:v1
ports:
- containerPort: 3000
name: http-server
env:
secret:
- secretName: mysecret
并创建了一个秘密文件:
# secret.yml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
RAILS_ENV: production
当我运行:
kubectl create -f web-controller.yml
显示:
error: could not read an encoded object from web-controller.yml: unable to load "web-controller.yml": json: cannot unmarshal object into Go value of type []v1.EnvVar
error: no objects passed to create
可能web-controller.yml
文件中的yaml格式有误。那怎么写呢?
您需要对值进行 base64
编码,并且您的密钥必须是有效的 DNS 标签,例如,将 RAILS_ENV
替换为 rails-env
。另请参阅我放在一起的这个端到端示例 here 以了解更多详细信息和具体步骤。
我们目前不支持公开为环境变量的秘密。
secret.yml
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
stringData:
RAILS_ENV: production
stringData 是您所追求的简易模式版本,不过是一回事。 你会看到用于在注释中创建秘密的明文原始 yaml(如果你使用上述方法,这意味着你的注释中将有一个人类可读的秘密,如果你使用以下方法,你将拥有 base64 'd secret in your annotation),除非你跟进像这样的擦除注释命令:
kubectl apply -f secret.yml
kubectl 注释秘密 mysecret kubectl.kubernetes.io/last-applied-configuration-
(最后的 - 是说要擦除它)
kubectl get secret mysecret -n=api -o yaml
(确认)
或者你会做
Bash#回声制作 | base64
cHJvZHVjdGlvbgo=
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
RAILS_ENV: cHJvZHVjdGlvbgo=
假设我们现在按照以下步骤在部署中添加 imagepull 机密,
kubectl create secret docker-registry secret-name --docker-server=<registry-server-url> --docker-username=<Username> --docker-password=<password> --docker-email=<your-email>
现在在部署 yaml 文件中引用它,
apiVersion: v1
kind: Deployment
metadata:
name: test-deployment
spec:
containers:
- name: test-app
image: <Image-name-private>
imagePullSecrets:
- name: secret-name
或
假设您有一些 api 密钥用于访问该应用程序。
kubectl create secret generic secret-name --from-literal api-key="<your_api-key"
现在像这样在部署中引用它。
env:
- name: API_KEY
valueFrom:
secretKeyRef:
name: secret-name
key: api-key