通过 https 使用 kubeconfig 提供 Kubernetes 集群身份验证
Provide Kubernetes cluster authentication with kubeconfig over https
我有一个 kubernetes 集群。我使用 Google Cloud
创建集群,但没有使用 GKE,而是使用 GCE。我使用 VM instances
创建了一个 master node
和两个 worker nodes
。 Kubeadm
用于连接主节点和工作节点以及 kube-flannel.yml
文件。我正在使用我的 Vm's public ip & nodePort
在 postman
中将我的集群暴露在外面。我能打到那个URL。 publicip:nodePort/adapter_name
。命中到达我的 pods 并且正在生成日志。我以前用minikube
的时候,是用port-forwarding
暴露端口的。现在我不用那个了。
位置 $HOME/.kube/config
中存在名为 config 的默认 kubeconfig
文件。其中包含以下内容。
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJ....
server: https://10.128.0.12:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFe....
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb.....
服务器 IP
是 https://10.128.0.12:6443
。我可以将此默认设置 URL 更改为身份验证所需的设置吗 [my rest api url]??
我的要求是为我的其余 api url 提供身份验证,我的应用程序启用,而 运行 在 kubernetes pod 中。
如何使用此 kubeconfig
方法或通过创建新的 kubeconfig 文件并使用该文件来验证我的其余 api url?
http://docs.shippable.com/deploy/tutorial/create-kubeconfig-for-self-hosted-kubernetes-cluster/
我从上面的两个博客中得到了一些想法并尝试实现它,但其中 none 满足了我的要求。也可以使用任何 JWT 令牌通过邮递员进行身份验证。
Kubernetes 版本:
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.4", GitCommit:"d360454c9bcd1634cf4cc52d1867af5491dc9c5f", GitTreeState:"clean", BuildDate:"2020-11-11T13:17:17Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.4", GitCommit:"d360454c9bcd1634cf4cc52d1867af5491dc9c5f", GitTreeState:"clean", BuildDate:"2020-11-11T13:09:17Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"linux/amd64"}
将其发布为 Community Wiki
。
我。访问 Kubernetes API.
Can I change this default URL (cluster server IP address) to the one required for authentication my rest api url??
我不会推荐这个。 KUBECONFIG
文件用于组织有关集群、用户、命名空间、身份验证机制的信息,并存储有关您与 Kubernetes 集群的连接的信息。当你使用 kubectl 执行命令时,它会从这个 KUBECONFIG
.
中获取正确的通信信息
在 KUBECONFIG
中,您可以使用 X509 Client Certs
或不同类型的 Tokens
进行身份验证。可以在 Authentication strategies and Access Clusters Using the Kubernetes API
中找到更多详细信息
如果您对如何使用 Beare Token 访问 kubernetes API 感兴趣,请查看 this docs.
二.访问客户端 API
如果您想将端点 rest api 公开为 public,您可以使用:
Exposes the Service on each Node's IP at a static port (the NodePort). A ClusterIP Service, to which the NodePort Service routes, is automatically created. You'll be able to contact the NodePort Service, from outside the cluster, by requesting :.
Exposes the Service externally using a cloud provider's load balancer. NodePort and ClusterIP Services, to which the external load balancer routes, are automatically created.
注意:对于裸机环境,考虑使用Metallb
Kubernetes 不为裸机集群提供网络负载均衡器(LoadBalancer 类型的服务)的实现。 Kubernetes 附带的 Network LB 的实现都是调用各种 IaaS 平台(GCP、AWS、Azure……)的胶水代码。如果您 运行 不在受支持的 IaaS 平台(GCP、AWS、Azure...)上,LoadBalancers 在创建时将无限期地保持在“待处理”状态。
一旦您将 api 暴露给外界(如有必要)
您可以在客户端和服务器(api)端点之间使用双向 TLS 身份验证。
可以使用Ingress with External OAUTH Authentication
作为替代解决方案,您可以考虑将 Keycloak as additional authentication with Gatekeeper in rest api 作为 sidecare,用于验证是否存在身份验证。
如果您对微服务之间的身份验证感兴趣,可以查看 Authentication between microservices using Kubernetes identities 文章。
如果你对 istio 感兴趣,请看一看 Istio Security
Istio 提供两种类型的身份验证:
- 对等身份验证: 用于服务到服务身份验证以验证建立连接的客户端
- 请求身份验证:用于最终用户身份验证以验证附加到请求的凭据。 Istio 通过 JSON Web 令牌 (JWT) 验证启用请求级身份验证,并使用自定义身份验证提供程序或任何 OpenID Connect 提供程序简化开发人员体验 -
example
验证我们的客户端 api/end 要点 url 的最佳方法是使用 Istio
我在附上的 PDF 文件中记录了通过 Istio 提供安全性的整个过程 here。 Istio用于token的验证,Keycloak用于JWT Token的生成。
我有一个 kubernetes 集群。我使用 Google Cloud
创建集群,但没有使用 GKE,而是使用 GCE。我使用 VM instances
创建了一个 master node
和两个 worker nodes
。 Kubeadm
用于连接主节点和工作节点以及 kube-flannel.yml
文件。我正在使用我的 Vm's public ip & nodePort
在 postman
中将我的集群暴露在外面。我能打到那个URL。 publicip:nodePort/adapter_name
。命中到达我的 pods 并且正在生成日志。我以前用minikube
的时候,是用port-forwarding
暴露端口的。现在我不用那个了。
位置 $HOME/.kube/config
中存在名为 config 的默认 kubeconfig
文件。其中包含以下内容。
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJ....
server: https://10.128.0.12:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFe....
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb.....
服务器 IP
是 https://10.128.0.12:6443
。我可以将此默认设置 URL 更改为身份验证所需的设置吗 [my rest api url]??
我的要求是为我的其余 api url 提供身份验证,我的应用程序启用,而 运行 在 kubernetes pod 中。
如何使用此 kubeconfig
方法或通过创建新的 kubeconfig 文件并使用该文件来验证我的其余 api url?
http://docs.shippable.com/deploy/tutorial/create-kubeconfig-for-self-hosted-kubernetes-cluster/
我从上面的两个博客中得到了一些想法并尝试实现它,但其中 none 满足了我的要求。也可以使用任何 JWT 令牌通过邮递员进行身份验证。
Kubernetes 版本:
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.4", GitCommit:"d360454c9bcd1634cf4cc52d1867af5491dc9c5f", GitTreeState:"clean", BuildDate:"2020-11-11T13:17:17Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.4", GitCommit:"d360454c9bcd1634cf4cc52d1867af5491dc9c5f", GitTreeState:"clean", BuildDate:"2020-11-11T13:09:17Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"linux/amd64"}
将其发布为 Community Wiki
。
我。访问 Kubernetes API.
Can I change this default URL (cluster server IP address) to the one required for authentication my rest api url??
我不会推荐这个。 KUBECONFIG
文件用于组织有关集群、用户、命名空间、身份验证机制的信息,并存储有关您与 Kubernetes 集群的连接的信息。当你使用 kubectl 执行命令时,它会从这个 KUBECONFIG
.
在 KUBECONFIG
中,您可以使用 X509 Client Certs
或不同类型的 Tokens
进行身份验证。可以在 Authentication strategies and Access Clusters Using the Kubernetes API
如果您对如何使用 Beare Token 访问 kubernetes API 感兴趣,请查看 this docs.
二.访问客户端 API
如果您想将端点 rest api 公开为 public,您可以使用:
Exposes the Service on each Node's IP at a static port (the NodePort). A ClusterIP Service, to which the NodePort Service routes, is automatically created. You'll be able to contact the NodePort Service, from outside the cluster, by requesting :.
Exposes the Service externally using a cloud provider's load balancer. NodePort and ClusterIP Services, to which the external load balancer routes, are automatically created.
注意:对于裸机环境,考虑使用Metallb
Kubernetes 不为裸机集群提供网络负载均衡器(LoadBalancer 类型的服务)的实现。 Kubernetes 附带的 Network LB 的实现都是调用各种 IaaS 平台(GCP、AWS、Azure……)的胶水代码。如果您 运行 不在受支持的 IaaS 平台(GCP、AWS、Azure...)上,LoadBalancers 在创建时将无限期地保持在“待处理”状态。
一旦您将 api 暴露给外界(如有必要)
您可以在客户端和服务器(api)端点之间使用双向 TLS 身份验证。
可以使用Ingress with External OAUTH Authentication
作为替代解决方案,您可以考虑将 Keycloak as additional authentication with Gatekeeper in rest api 作为 sidecare,用于验证是否存在身份验证。
如果您对微服务之间的身份验证感兴趣,可以查看 Authentication between microservices using Kubernetes identities 文章。
如果你对 istio 感兴趣,请看一看 Istio Security Istio 提供两种类型的身份验证:
- 对等身份验证: 用于服务到服务身份验证以验证建立连接的客户端
- 请求身份验证:用于最终用户身份验证以验证附加到请求的凭据。 Istio 通过 JSON Web 令牌 (JWT) 验证启用请求级身份验证,并使用自定义身份验证提供程序或任何 OpenID Connect 提供程序简化开发人员体验 - example
验证我们的客户端 api/end 要点 url 的最佳方法是使用 Istio
我在附上的 PDF 文件中记录了通过 Istio 提供安全性的整个过程 here。 Istio用于token的验证,Keycloak用于JWT Token的生成。