gra*_*der 4 kubernetes kubectl
该示例有:
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: mycontainer
image: redis
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: usernamekey
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: passwordkey
restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)
以上来自:
https://kubernetes.io/docs/concepts/configuration/secret/
我创建了一个这样的秘密:
kubectl --namespace=mycustomnamespace create secret generic mysecret --from-literal=passwordkey="abc123" --from-literal=usernamekey="mememe"
Run Code Online (Sandbox Code Playgroud)
我知道上述秘密存在于命名空间下。
但如果我尝试这个:
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
namespace: mycustomnamespace
spec:
containers:
- name: mycontainer
image: redis
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: usernamekey
namespace: mycustomnamespace
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: passwordkey
namespace: mycustomnamespace
restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)
(请注意,我在元数据下添加了命名空间声明)
我收到此错误:
验证数据时出错:[ValidationError(Pod.spec.containers[1].env[2].valueFrom.secretKeyRef):io.k8s.api.core.v1.SecretKeySelector 中的未知字段“命名空间”,ValidationError(Pod.spec.容器[1].env[6].valueFrom.secretKeyRef):io.k8s.api.core.v1.SecretKeySelector中的未知字段“命名空间”];
如果我取出命名空间(在 SecretKeyRef 下)....pod 会失败..
警告失败 2s(x8 超过 1m)kubelet、minikube 错误:未找到秘密“mysecret”
是的,我的秘密在命名空间中:
kubectl get secrets --namespace mycustomnamespace
NAME TYPE DATA AGE
default-token-55bzp kubernetes.io/service-account-token 3 10m
mysecret Opaque 2 10m
Run Code Online (Sandbox Code Playgroud)
附加:(分辨率)
这是我的错误。在瓦西里的回答下查看我的评论。
但基本上,神奇的酱是下面的 yml....
metadata:
name: secret-env-pod
namespace: mycustomnamespace
Run Code Online (Sandbox Code Playgroud)
上面的 yml 应该“驱动”其余配置 (yml) 的命名空间(也称为设置命名空间的范围)......
(如果您是这个问题的未来读者,请仔细检查您是否在正确的命名空间下拥有所有内容。所有正常的“get”语句都需要使用 -n (又名 --namespace)作为一部分。
例子
kubectl get pods
Run Code Online (Sandbox Code Playgroud)
以上只会获取“默认”下的 Pod。
你必须做
kubectl get pods --namespace mycustomnamespace
Run Code Online (Sandbox Code Playgroud)
namespace: mycustomnamespace只需从 pod SecretKeyRef 定义中删除即可。
另外你的秘密创建命令应该是这样的:
kubectl --namespace=mycustomnamespace create secret generic mysecret --from-literal=passwordkey="abc123" --from-literal=usernamekey="mememe"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6180 次 |
| 最近记录: |