- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已在 AWS 上使用 kops 创建了一个 Kubernetes 集群。并可以从我的本地计算机通过 kubectl
成功管理它。
我可以使用 kubectl config view
查看当前配置,也可以直接访问 ~/.kube/config
中存储的状态,例如:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://api.{CLUSTER_NAME}
name: {CLUSTER_NAME}
contexts:
- context:
cluster: {CLUSTER_NAME}
user: {CLUSTER_NAME}
name: {CLUSTER_NAME}
current-context: {CLUSTER_NAME}
kind: Config
preferences: {}
users:
- name: {CLUSTER_NAME}
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
password: REDACTED
username: admin
- name: {CLUSTER_NAME}-basic-auth
user:
password: REDACTED
username: admin
我需要允许其他用户也进行管理。这个user guide描述了如何在另一台用户计算机上定义这些,但没有描述如何在集群本身内实际创建用户的凭据。你如何做到这一点?
此外,仅共享 cluster.certificate-authority-data
是否安全?
最佳答案
有关身份验证的完整概述,请参阅 Authentication 上的官方 Kubernetes 文档。和 Authorization
对于用户来说,最好使用 Kubernetes 的身份提供程序 (OpenID Connect)。
如果您使用 GKE/ACS,则可以与相应的身份和访问管理框架集成
如果您自行托管 kubernetes(使用 kops 时就是这种情况),您可以使用 coreos/dex与 LDAP/OAuth2 身份提供商集成 - 一个很好的引用是详细的 2 部分 SSO for Kubernetes文章。
kops (1.10+) 现在内置 authentication support如果您使用的是 AWS,这可以简化与作为身份提供商的 AWS IAM 的集成。
对于 Dex,有一些开源 cli 客户端,如下所示:
如果您正在寻找一种快速、简单(从长远来看不是最安全且易于管理)的开始方式,您可能会滥用 serviceaccounts
- 有 2 个用于控制专门策略的选项使用权。 (见下文)
注意,从 1.6 开始,强烈建议使用基于角色的访问控制!这个答案不包括 RBAC 设置
编辑:很棒,但已经过时了(2017-2018),由 Bitnami 在 User setup with RBAC 上指导也可用。
启用服务帐户访问的步骤如下(具体取决于您的集群配置是否包含 RBAC 或 ABAC 策略,这些帐户可能拥有完整的管理员权限!):
编辑:Here is a bash script to automate Service Account creation - see below steps
为用户Alice
创建服务帐户
kubectl create sa alice
获取相关 secret
secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
从 secret 中获取 ca.crt
(使用 OSX base64
和 -D
标志进行解码)
kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D > ca.crt
从 secret 中获取服务帐户 token
user_token=$(kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D)
从 kubectl 配置中获取信息(当前上下文、服务器......)
# get current context
c=$(kubectl config current-context)
# get cluster name of context
name=$(kubectl config get-contexts $c | awk '{print $3}' | tail -n 1)
# get endpoint of current context
endpoint=$(kubectl config view -o jsonpath="{.clusters[?(@.name == \"$name\")].cluster.server}")
在新机器上,按照以下步骤操作(鉴于上面检索到的 ca.cert
和 $endpoint
信息:
安装kubectl
brew install kubectl
设置集群(在存储ca.crt
的目录中运行)
kubectl config set-cluster cluster-staging \
--embed-certs=true \
--server=$endpoint \
--certificate-authority=./ca.crt
设置用户凭据
kubectl config set-credentials alice-staging --token=$user_token
定义 alice 用户与临时集群的组合
kubectl config set-context alice-staging \
--cluster=cluster-staging \
--user=alice-staging \
--namespace=alice
将用户的当前上下文切换到 alice-staging
kubectl config use-context alice-staging
要使用策略控制用户访问(使用 ABAC ),您需要创建 policy
文件(例如):
{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"kind": "Policy",
"spec": {
"user": "system:serviceaccount:default:alice",
"namespace": "default",
"resource": "*",
"readonly": true
}
}
在每个主节点上配置此 policy.json
并添加 --authorization-mode=ABAC --authorization-policy-file=/path/to/policy.json
API 服务器的标志
这将允许 Alice(通过她的服务帐户)仅对默认命名空间中的所有资源具有只读权限。
关于kubernetes - 如何向 Kubernetes(kubectl)添加用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42170380/
core@core-1-94 ~ $ kubectl exec -it busybox -- nslookup kubernetesServer: 10.100.0.10Address 1: 1
我有一个节点错误地注册在集群 B 上,而它实际上为集群 A 服务。 这里“在集群 B 上注册”意味着我可以从 kubectl get node 看到节点来自集群 B。 我想从集群 B 中取消注册这个节
据我所知,Kubernetes 是一个用于部署和管理容器的编排框架。另一方面,Kubernetes Engine 负责集群的伸缩,以及管理容器镜像。 从上面看,它们似乎是同一件事或非常相似。从上面的定
我正在学习 Kubernetes 和 Docker,以启动一个简单的 Python 网络应用程序。我对上述所有技术都不熟悉。 下面是我计划的方法: 安装 Kubernetes。 在本地启动并运行集群。
我了解如何在 kubernetes 中设置就绪探测器,但是是否有任何关于在调用就绪探测器时微服务应实际检查哪些内容的最佳实践?两个具体例子: 一个面向数据库的微服务,如果没有有效的数据库连接,几乎所有
Kubernetes 调度程序是仅根据请求的资源和节点在服务器当前快照中的可用资源将 Pod 放置在节点上,还是同时考虑节点的历史资源利用率? 最佳答案 在官方Kubernetes documenta
我们有多个环境,如 dev、qa、prepod 等。我们有基于环境的命名空间。现在我们将服务命名为 environment 作为后缀。例如。, apiVersion: apps/v1
我有一个关于命名空间的问题,并寻求您的专业知识来消除我的疑虑。 我对命名空间的理解是,它们用于在团队和项目之间引入逻辑边界。 当然,我在某处读到命名空间可用于在同一集群中引入/定义不同的环境。 例如测
我知道角色用于授予用户或服务帐户在特定命名空间中执行操作的权限。 一个典型的角色定义可能是这样的 kind: Role apiVersion: rbac.authorization.k8s.io/v1
我正在学习 Kubernetes,目前正在深入研究高可用性,虽然我知道我可以使用本地(或远程)etcd 以及一组高可用性的控制平面(API 服务器、 Controller 、调度程序)来设置minio
两者之间有什么实际区别?我什么时候应该选择一个? 例如,如果我想让我的项目中的开发人员仅查看 pod 的日志。似乎可以通过 RoleBinding 为服务帐户或上下文分配这些权限。 最佳答案 什么是服
根据基于时间的计划执行容器或 Pod 的推荐方法是什么?例如,每天凌晨 2 点运行 10 分钟的任务。 在传统的 linux 服务器上,crontab 很容易工作,而且显然在容器内部仍然是可能的。然而
有人可以帮助我了解服务网格本身是否是一种入口,或者服务网格和入口之间是否有任何区别? 最佳答案 “入口”负责将流量路由到集群中(来自 Docs:管理对集群中服务的外部访问的 API 对象,通常是 HT
我是 kubernetes 集群的新手。我有一个简单的问题。 我在多个 kubernetes 集群中。 kubernetes 中似乎有多个集群可用。所以 kubernetes 中的“多集群”意味着:
我目前正在使用Deployments管理我的K8S集群中的Pod。 我的某些部署需要2个Pod /副本,一些部署需要3个Pod /副本,而有些部署只需要1个Pod /副本。我遇到的问题是只有一个 po
我看过官方文档:https://kubernetes.io/docs/tasks/setup-konnectivity/setup-konnectivity/但我还是没明白它的意思。 我有几个问题:
这里的任何人都有在 kubernetes 上进行批处理(例如 spring 批处理)的经验?这是个好主意吗?如果我们使用 kubernetes 自动缩放功能,如何防止批处理处理相同的数据?谢谢你。 最
我有一个具有 4 个节点和一个主节点的 Kubernetes 集群。我正在尝试在所有节点中运行 5 个 nginx pod。目前,调度程序有时在一台机器上运行所有 pod,有时在不同的机器上运行。 如
我在运行 Raspbian Stretch 的 Raspberry PI 3 上使用以下命令安装最新版本的 Kubernetes。 $ curl -s https://packages.cloud.g
container port 与 Kubernetes 容器中的 targetports 有何不同? 它们是否可以互换使用,如果可以,为什么? 我遇到了下面的代码片段,其中 containerPort
我是一名优秀的程序员,十分优秀!