Istio允许Docker Desktop Kubernetes上的第三方JWT



我使用的是docker桌面附带的预打包Kubernetes集群。我在一台windows机器上,使用WSL2在Ubuntu-18.04虚拟机上运行Kubernetes。在我的Kubernetes集群上运行:

istioctl install --set profile=demo --set values.global.jwtPolicy=third-party-jwt

但我得到的信息是:

Detected that your cluster does not support third party JWT authentication. Falling back to less secure first party JWT. See https://istio.io/v1.9/docs/ops/best-practices/security/#configure-third-party-service-account-tokens for details.

在那之后,它会冻结,直到超时:

Processing resources for Istiod. Waiting for Deployment/istio-system/istiod

有没有办法在我的集群中启用第三方JWT?

在您收到的错误消息中,有一个链接指向有关该特定问题的文档:

  • Istio.io:最新:文档:操作:最佳实践:安全:配置第三方服务帐户令牌

引用官方文件:

配置第三方服务帐户令牌

要使用Istio控制平面进行身份验证,Istio代理将使用服务帐户令牌。Kubernetes支持两种形式的代币:

第三方令牌,具有一定范围的受众和过期时间。第一方代币,没有过期,安装在所有pod中。由于第一方代币的属性不太安全,Istio将默认使用第三方代币。然而,并不是所有的Kubernetes平台都启用了此功能。

如果您使用istioctl进行安装,将自动检测到支持。这也可以手动完成,并通过传递--set values.global.jwtPolicy=third-party-jwt--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文档。


我不确定使用Docker Desktop创建的Kubernetes(1.19.7(是否支持此功能,但Kubernete文档显示了如何启用它:

服务帐户代币数量预测

功能状态:Kubernetes v1.20[稳定]

注意:

要启用和使用令牌请求投影,必须为kube-apiserver指定以下每个命令行参数:

--service-account-issuer
--service-account-key-file
--service-account-signing-key-file
--api-audiences

您可以用Kubernetes在Docker Desktop中以一种有点技巧的方式编辑kubeapi-server清单。你可以按照这个答案(我是这个答案的作者(阅读更多关于它的信息:

  • Stackoverlow.com:问题:Windows上Docker Desktop的Kubernetes配置目录的位置

解决方法

当您在主机上使用Docker时,您也可以考虑将minikube与其--driver=docker一起使用。它支持Istio文档中描述的第三方JWT令牌(它通过$ kubectl get --raw ...命令生成响应(。

旁注!

我已经在minikube版本1.19.0和Kubernetes版本1.20.2上进行了测试。

相关内容

  • 没有找到相关文章

最新更新