在您收到的错误消息中,有一个链接指向有关该特定问题的文档:
- Istio.io:最新:文档:操作:最佳实践:安全性:配置第三方服务帐户令牌 https://istio.io/latest/docs/ops/best-practices/security/#configure-third-party-service-account-tokens
引用官方文档:
配置第三方服务帐户令牌
为了通过 Istio 控制平面进行身份验证,Istio 代理将使用服务帐户令牌。 Kubernetes 支持这些令牌的两种形式:
第三方代币,具有一定的受众范围和有效期。
第一方令牌,没有过期时间并安装到所有 Pod 中。
由于第一方令牌的属性不太安全,Istio 将默认使用第三方令牌。但是,并非所有 Kubernetes 平台都启用此功能。
如果您使用 istioctl 进行安装,将自动检测支持。这也可以手动完成,并通过传递进行配置--set values.global.jwtPolicy=third-party-jwt
or --set values.global.jwtPolicy=first-party-jwt
.
要确定您的集群是否支持第三方令牌,请查找 TokenRequest API。如果没有返回任何响应,则表示不支持该功能:
$ kubectl get --raw /api/v1 | jq '.resources[] | select(.name | index("serviceaccounts/token"))'
{
"name": "serviceaccounts/token",
"singularName": "",
"namespaced": true,
"group": "authentication.k8s.io",
"version": "v1",
"kind": "TokenRequest",
"verbs": [
"create"
]
}
虽然现在大多数云提供商都支持此功能,但许多本地开发工具和自定义安装在 Kubernetes 1.20 之前可能不支持。要启用此功能,请参阅Kubernetes 文档 https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#service-account-token-volume-projection.
我不确定 Kubernetes 是否支持此功能(1.19.7
)使用 Docker Desktop 创建,但 Kubernetes 文档显示了如何启用它的方法:
服务账户代币数量预测
特征状态:Kubernetes v1.20 [稳定]
Note:
要启用和使用令牌请求投影,您必须向 kube-apiserver 指定以下每个命令行参数:
--service-account-issuer
--service-account-key-file
--service-account-signing-key-file
--api-audiences
您可以编辑您的kubeapi-server
以一种有点 hacky 的方式在带有 Kubernetes 的 Docker 桌面中体现。您可以通过以下答案(我是该答案的作者)来阅读更多相关信息:
- Stackoverflow.com:问题:Windows 上 Docker Desktop 的 Kubernetes 配置目录的位置 https://stackoverflow.com/questions/64758012/location-of-kubernetes-config-directory-with-docker-desktop-on-windows/64774052#64774052
解决方法
当您在主机上使用 Docker 时,您还可以考虑使用minikube
以其--driver=docker
。它支持第三方 JWT 令牌,如 Istio 文档中所述(它生成来自$ kubectl get --raw ...
命令)。
附注!
我已经在一个上测试过这个minikube
版本1.19.0
和 Kubernetes 版本1.20.2
.