问题标签 [kubernetes-security]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kubernetes - Jenkins Kubernetes 构建因禁止而失败(用户 = 系统:匿名,动词 = 获取,资源 = 节点,子资源 = 代理)
执行摘要
Jenkins 正在 Kubernetes 集群中运行,刚刚升级到 1.19.7,但现在 jenkins 构建脚本在运行时失败
给出错误
但是我应该更改哪些权限或角色?
更多细节在这里
Jenkins 作为主节点在 Kubernetes 集群中运行,它获取 GIT 作业,然后创建也应该在同一集群中运行的从属 pod。我们在集群中有一个名为“Jenkins”的命名空间。当您使用 Jenkins 在自己的容器中创建微服务应用程序的构建时,会提示通过测试、演示和生产的管道部署这些应用程序。
集群已使用 kops 更新到 Kubernetes 1.19.7。一切仍然正常部署、运行和访问。对于用户来说,您不会认为集群内部运行的应用程序存在问题;所有这些都可以通过浏览器访问,并且 PODS 没有显示出任何重大问题。
Jenkins 仍然可以访问(运行版本 2.278,使用 Kubernetes 插件 1.29.1,Kubernetes 凭证 0.8.0,Kubernetes 客户端 API 插件 4.13.2-1)
我可以登录 Jenkins,查看我通常希望看到的所有内容
我可以使用 LENS 连接到集群并正常查看所有节点、Pod 等。
但是,这就是升级 1.19.7 后我们的问题所在,当 Jenkins 作业启动时,它现在总是在尝试设置 kubectl 上下文时失败
我们在同一位置的每个构建管道中都会收到此错误...
现在我认为这是关于安全性....但我不确定要改变什么
我可以看到它正在使用 system:anonymous 并且这可能在以后的 Kubernetes 版本中受到限制,但我不确定如何提供另一个用户或允许它从这个命名空间中的 Jenkins 主节点工作。
当我们运行 jenkins 并部署 jenkins 时,我可以看到以下服务帐户
并且
以及以下角色
詹金斯角色
詹金斯部署者角色
和詹金斯命名空间管理器
最后是 jenkins-deployer-role
以及以下绑定..
我真的坚持这个,我不想让 system:anonymous 访问所有内容,尽管猜测这可能是一个选项。
帮助构建它的詹金斯文件是
詹金斯文件
和 groovy 文件
从日志看来,它似乎是在运行时
它抛出错误
但是我应该更改哪些权限或角色?
非常感谢,尼克
google-kubernetes-engine - 检查 GKE 集群中的 PoDSecurityPolicy 状态
如何检查是否PoDSecurityPolicy
在集群上启用GKE
?使用gcloud container clusters describe <clustername>
,我找不到任何东西。
如果我在已启用此功能的集群上plugin
启用它,则会显示该插件已启用,因此实际上无法知道是否plugin
已在集群上启用
asp.net-core - Kubernetes 客户端库 AuthenticationException
一段时间以来,我一直在使用 Kubernetes .net 客户端库版本来从容器内访问 Kubernetes api。今天我从客户端库版本 1.6.11 更新到 4.0.21 但这破坏了客户端身份验证的某些部分。
这是我得到的例外:
除了内部例外:
我使用默认的 inClusterConfiguration 来创建 Kubernetes 客户端的实例:
在验证我仍然可以通过 curl 使用与存储在/var/run/secrets/kubernetes.io/serviceaccount/
.
我对 SSL 不是很熟悉,但经过一番挣扎后,我找到了一种解决方法,方法是将 ca.cert 文件从 serviceaccount 目录复制到/usr/local/share/ca-certificates/
并运行update-ca-certificates
,但我确实想知道现在需要执行此操作的发生了什么变化。
有什么方法可以配置客户端,使其自动完成或以其他方式解决?
kubernetes - 如何防止用户创建带有特定标签的 pod?
我知道如何使用 RBAC 和 X.509 证书来识别用户kubectl
并限制他们(使用Role
and RoleBinding
)在命名空间中创建任何类型的 pod。但是,我不知道如何阻止他们将特定标签放在他们试图创建的 pod(或任何资源)上。
我想做的是:
- 创建一个
NetworkPolicy
只group: cross-ns
允许其他命名空间中带有标签的资源访问special-namespace
- 有一个用户无法使用标签创建 pod 或其他资源
group: cross-ns
- 拥有另一个可以使用标签创建资源的用户
group: cross-ns
这可能吗?
kubernetes - Kubernetes Secret 未以编码格式存储在环境变量中
我是 Kubernetes 的初学者。我创建了一个秘密文件并在部署 yaml 文件中引用它。
应用程序-secret.yaml
部署.yaml
使用命令kubectl get secret pod-54rfxd -n dev-ns -o json
时,它仅以编码格式打印用户名和密码。当我使用命令查询环境变量列表时kubectl exec pod-54rfxd -n dev-ns -- printenv
,它给出了以下结果。
为什么它在环境变量中不是编码格式。您能否让我知道原因,是否可以将其编码为编码格式?
kubernetes - 使用带有 RBAC(X509 证书)的 Helm 3 和 K8s 集群,Helm 需要哪些权限?我认为它会为发布信息创建 ConfigMap?
我已经将集群 (k3d) 设置为具有一些 RBAC 规则,并且还创建了一个证书来识别我的用户的kubectl
命令。我已将用户设置为在特定命名空间中有一个Role
via a 。RoleBinding
我想这样做,以便他们可以创建Deployment
s, Pod
s, Service
s 但不能创建Secret
or ConfigMap
。如果我这样做,他们能使用 Helm 来安装东西吗?Helm 不会将其有关发布的信息存储在Secret
s 或ConfigMap
s 中吗?
我是否需要授予用户访问权限才能创建这些东西?
示例角色
kubernetes - Kubernetes 中的 RBAC
我一直致力于识别 Kubernetes RBAC 清单文件中授予用户、组或服务帐户广泛访问权限的角色。最初,我正在确定动词和资源对象的通配符(“*”)的用法。我的工作是自动化这个过程并检测给定清单文件中的任何通配符用法。为了更好地解释我的用例,我提供了一个示例 RBAC 角色,它允许对 pod 执行所有操作。
当这个 sample_role 与任何用户绑定时,它允许他们对 pod 执行所有操作。很容易检测到任何此类用法并将其自动化(像 kubiscan 这样的开源工具已经在这样做了)。然而,当我开始研究更多这些清单文件时,我遇到了非常具有挑战性的用例。挑战不在于角色,而在于该角色与谁相关。请查看示例代码以了解我的用例。
在这个用例中,sample_role 和 sample_role_duplicate 都授予对 pod 的广泛访问权限。sample_role 绑定到 Engineers 组,sample_role_duplicate 绑定到 Operations 组。我目前的方法会标记两个角色并提醒编写此清单文件的人。但在第二个示例中,工程师组被允许广泛访问 pod,而操作组不允许广泛访问 pod。我识别任何此类异常的最初想法是创建此类角色绑定的列表并为该角色创建异常。但是,当添加任何类似的新角色和组时,这很难管理。我发现自动化这个过程更加困难。我想知道是否有更好的方法来解决这个问题?我想听听你的想法。
kubernetes - Kubernetes 上的 Gitlab 管道部署问题
需要一些关于 Kubernetes 集群的 gitlab 身份验证的建议。我已经基于令牌生成了 kubeconfig 文件,以对 gitlab 进行身份验证,以便我在 kubernetes 上进行部署。但是,当我尝试通过 gitlab 管道部署任何对象时,它会失败并出现以下错误?
gitlab runner 控制台日志,
能够使用我用于 gitlab 的相同 KUBECONFIG 从本地机器验证和查看集群对象
在 gitlab 上使用我本地的工作配置文件作为 kubeconfig 来验证部署,但不确定为什么会失败?
在本地机器上工作的 kubeconfig 是否在 gitlab 上不起作用?我在这里遗漏了什么?
太感谢了。
docker - 我们能否提供一个需要由 Kubernetes 中的 pod/容器运行的用户名?
在Pod
规范中,有一个选项来指定需要由所有容器运行的用户 ID
有没有办法我们也可以更改用户名,就像我们对 windows pod 和容器的方式一样,如下所示
kubernetes - 无法在具有服务帐户、已创建 ClusterRole 和 ClusterRolebinding 的命名空间中创建部署
我在练习 Security k8s 时手忙脚乱。这是我遇到的一个要解决的练习题。
问题:
创建serviceaccount
'john' 并有权在给定的namespace 'hr'
Create clusterrole and clusterrolebindings
required 中创建删除获取部署、状态集、守护程序集。
方法: 已尝试创建 sa 和 clusterrole 和 clusterrolebinding(将 clusterrole 与创建的 sa 绑定)但是当我检查它时给出“否”
创建 sa:
创建集群角色:
创建集群角色绑定:
我也尝试在命名空间中创建服务帐户,在命名空间中创建集群角色绑定,但我仍然没有。不幸的是,我没有解决这个问题的方法。感谢这里的任何帮助。