我正在使用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格式错误。那怎么写?
答案 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