Kubernetes 使用terraform部署应用程序不需要';我找不到我的服务帐户密码
在terraform部署的应用程序中使用kubernates秘密实际上是可能的吗。我看到一些奇怪的行为 我用适当的节点池、配置映射和秘密定义了一个集群。机密包含服务帐户密钥json数据。 然后,我可以使用Kubernetes 使用terraform部署应用程序不需要';我找不到我的服务帐户密码,kubernetes,terraform,google-kubernetes-engine,Kubernetes,Terraform,Google Kubernetes Engine,在terraform部署的应用程序中使用kubernates秘密实际上是可能的吗。我看到一些奇怪的行为 我用适当的节点池、配置映射和秘密定义了一个集群。机密包含服务帐户密钥json数据。 然后,我可以使用kubectl apply-f myapp deploy.yaml来部署我的应用程序,它运行良好。这告诉我集群是好的,包括秘密和配置。 但是,当我尝试使用terraform部署时,我在服务帐户获取中遇到了一个错误: 2019-07-19 06:20:45.497 INFO [myapp,,,]
kubectl apply-f myapp deploy.yaml来部署我的应用程序,它运行良好。这告诉我集群是好的,包括秘密和配置。
但是,当我尝试使用terraform部署时,我在服务帐户获取中遇到了一个错误:
2019-07-19 06:20:45.497 INFO [myapp,,,] 1 --- [main] b.c.PropertySourceBootstrapConfiguration : Located property source: SecretsPropertySource {name='secrets.myapp.null'}
2019-07-19 06:20:45.665 WARN [myapp,,,] 1 --- [main] io.fabric8.kubernetes.client.Config : Error reading service account token from: [/var/run/secrets/kubernetes.io/serviceaccount/token]. Ignoring.
2019-07-19 06:20:45.677 INFO [myapp,,,] 1 --- [main] n.c.m.s.myappApplication : The following profiles are active: test-dev
中间一行很有趣,它似乎试图从错误的地方读取服务帐户
我已将相关设置从yaml文件转到tf文件,但可能遗漏了一些内容。以下是yaml文件的外观:
...
env:
- name: GOOGLE_APPLICATION_CREDENTIALS
value: "/var/run/secret/cloud.google.com/myapp-sa.json"
volumeMounts:
- name: "service-account"
mountPath: "/var/run/secret/cloud.google.com"
ports:
- containerPort: 8080
volumes:
- name: "service-account"
secret:
secretName: "myapp"
...
...
env {
name = "GOOGLE_APPLICATION_CREDENTIALS"
value = "/var/run/secret/cloud.google.com/myapp-sa.json"
}
volume_mount {
name = "myapp-sa"
mount_path = "/var/run/secret/cloud.google.com"
sub_path = ""
}
}
volume {
name = "myapp-sa"
secret {
secret_name = "myapp"
}
}
...
这个yaml基本上可以正常工作。
现在,我的tf文件中的等效项如下所示:
...
env:
- name: GOOGLE_APPLICATION_CREDENTIALS
value: "/var/run/secret/cloud.google.com/myapp-sa.json"
volumeMounts:
- name: "service-account"
mountPath: "/var/run/secret/cloud.google.com"
ports:
- containerPort: 8080
volumes:
- name: "service-account"
secret:
secretName: "myapp"
...
...
env {
name = "GOOGLE_APPLICATION_CREDENTIALS"
value = "/var/run/secret/cloud.google.com/myapp-sa.json"
}
volume_mount {
name = "myapp-sa"
mount_path = "/var/run/secret/cloud.google.com"
sub_path = ""
}
}
volume {
name = "myapp-sa"
secret {
secret_name = "myapp"
}
}
...
这就产生了上述误差。它似乎决定在/var/run/secrets/kubernetes.io/servicecomport/token
中查找服务帐户令牌,而不是我告诉它的位置。但只有在地形部署时。我正在部署相同的映像,并使用相同的configmap部署到相同的集群中。我的tf有点问题。我已经尝试从yaml部署导入,但是我看不到任何重要的内容
FWIW这是一个在GKE上运行的Spring引导应用程序
希望有人知道答案
谢谢你的帮助。
更多信息:我打开了io.fabric8.kubernetes的调试,并重新运行了两个场景,即terraform和yaml文件。以下是相关的日志片段:
地形:
2019-07-23 23:03:39.189 DEBUG [snakecharmer,,,] 1 --- [ main] io.fabric8.kubernetes.client.Config : Trying to configure client from Kubernetes config...
2019-07-23 23:03:39.268 DEBUG [snakecharmer,,,] 1 --- [ main] io.fabric8.kubernetes.client.Config : Did not find Kubernetes config at: [/root/.kube/config]. Ignoring.
2019-07-23 23:03:39.274 DEBUG [snakecharmer,,,] 1 --- [ main] io.fabric8.kubernetes.client.Config : Trying to configure client from service account...
2019-07-23 23:03:39.274 DEBUG [snakecharmer,,,] 1 --- [ main] io.fabric8.kubernetes.client.Config : Found service account host and port: 10.44.0.1:443
2019-07-23 23:03:39.282 DEBUG [snakecharmer,,,] 1 --- [ main] io.fabric8.kubernetes.client.Config : Did not find service account ca cert at: [/var/run/secrets/kubernetes.io/serviceaccount/ca.crt].
2019-07-23 23:03:39.285 WARN [snakecharmer,,,] 1 --- [ main] io.fabric8.kubernetes.client.Config : Error reading service account token from: [/var/run/secrets/kubernetes.io/serviceaccount/token]. Ignoring.
2019-07-23 23:03:39.291 DEBUG [snakecharmer,,,] 1 --- [ main] io.fabric8.kubernetes.client.Config : Trying to configure client namespace from Kubernetes service account namespace path...
2019-07-23 23:03:39.295 DEBUG [snakecharmer,,,] 1 --- [ main] io.fabric8.kubernetes.client.Config : Did not find service account namespace at: [/var/run/secrets/kubernetes.io/serviceaccount/namespace]. Ignoring.
亚马尔:
看起来yaml部署在/var/run/secrets/kubernetes.io/servicecomport/ca.crt
等处找到了它需要的东西,而地形部署则没有。就好像在**terraform**中缺少一个幻影卷挂载一样,我找到了修复程序。terraformdeploy添加了一个automount\u service\u account\u token=false
,但是yaml的默认值是true
,这会产生很大的不同
开关位于我的tf文件中kubernetes\u部署的template.spec部分,现在看起来像以下代码片段:
...
spec {
restart_policy = "Always"
automount_service_account_token = true
container {
port {
container_port = 8080
protocol = "TCP"
}
...
设置automount\u service\u account\u token=true
是一个修复程序,它可以正常运行。我找到了修复程序。terraformdeploy添加了一个automount\u service\u account\u token=false
,但是yaml的默认值是true
,这会产生很大的不同
开关位于我的tf文件中kubernetes\u部署的template.spec部分,现在看起来像以下代码片段:
...
spec {
restart_policy = "Always"
automount_service_account_token = true
container {
port {
container_port = 8080
protocol = "TCP"
}
...
设置automount\u service\u account\u token=true
是一个解决方案,它可以很好地解决这个问题。非常感谢,我在这个问题上浪费了大约2天的时间。不客气。我浪费了差不多同样的时间:)非常感谢你,我在这个问题上浪费了大约两天。不客气。我也浪费了差不多:)