如何通过yaml将秘密数据设置为kubernetes的秘密?

时间:2015-11-16 09:58:01

标签: ruby-on-rails yaml kubernetes google-kubernetes-engine

我正在使用kubernetes将rails应用程序部署到Google容器引擎。

按照kubernetes的秘密文件:http://kubernetes.io/v1.1/docs/user-guide/secrets.html

我创建了一个Web控制器文件:

# 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格式错误。那怎么写?

4 个答案:

答案 0 :(得分:2)

您需要base64对值进行编码,并且您的密钥必须是有效的DNS标签,即将RAILS_ENV替换为rails-env。另请参阅我将here放在一起的端到端示例,以获取更多详细信息和具体步骤。

答案 1 :(得分:0)

我们目前不支持以env vars公开的秘密。

答案 2 :(得分:0)

secret.yml

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
stringData:
  RAILS_ENV: production

stringData是您所追求的简易模式版本,尽管有一件事。 您将在注释中看到用于创建秘密的明文原始yaml(如果您使用上述方法,则意味着您在注释中将拥有一个人类可读的秘密,如果使用以下方法,您将拥有base64注释中的“秘密”),除非您继续执行以下擦除注释命令:

kubectl apply -f secret.yml
kubectl注释秘密mysecret kubectl.kubernetes.io/last-applied-configuration-
(最后的-表示要删除它)
kubectl获得秘密mysecret -n = api -o yaml
(确认)

或者您愿意
Bash#回声产生| base64
cHJvZHVjdGlvbgo =

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  RAILS_ENV: cHJvZHVjdGlvbgo=

答案 3 :(得分:0)

假设我们现在按照以下步骤在部署中添加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

OR

假设您有一些用于访问应用程序的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