【问题标题】:Istio allow third party JWT on Docker Desktop KubernetesIstio 允许在 Docker 桌面 Kubernetes 上使用第三方 JWT
【发布时间】:2021-07-21 08:15:52
【问题描述】:

我使用的是 docker desktop 自带的预打包的 Kubernetes 集群。我在 Windows 机器上,使用 WSL 2 在 Ubuntu-18.04 VM 上运行 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?

【问题讨论】:

    标签: docker kubernetes istio istio-sidecar


    【解决方案1】:

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

    引用官方文档:

    配置第三方服务账户令牌

    为了通过 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 documentation


    我不确定使用 Docker Desktop 创建的 Kubernetes (1.19.7) 是否支持此功能,但 Kubernetes 文档显示了一种启用它的方法:

    服务账户代币量预测

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

    注意:

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

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

    您可以在 Docker 桌面中使用 Kubernetes 以一种有点 hacky 的方式编辑您的 kubeapi-server 清单。您可以按照以下答案(我是该答案的作者)阅读更多相关信息:


    解决方法

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

    附注!

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

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 2022-01-21
      • 2013-03-29
      • 2020-11-28
      • 2019-07-06
      • 2021-06-18
      相关资源
      最近更新 更多