簡體   English   中英

如何通過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控制器文件:

# 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

也許yaml格式在web-controller.yml文件中不正確。 那怎么寫?

您需要對值進行base64編碼,並且您的密鑰必須是有效的DNS標簽,也就是說,將RAILS_ENV替換為例如rails-env 另請參閱我在此處放在一起的端到端示例以了解更多詳細信息和具體步驟。

我們目前不支持作為環境變量公開的機密。

secret.yml

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

stringData是您所追求的簡易模式版本,盡管有一件事。 您將在注釋中看到用於創建秘密的明文原始yaml(如果您使用上述方法,則意味着您在注釋中將擁有一個人類可讀的秘密,如果使用以下方法,您將擁有base64注釋中的“秘密”),除非您按照以下步驟執行“擦除注釋”命令:

kubectl應用-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=

假設我們現在在部署中添加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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM