通过https使用kubeconfig提供Kubernetes集群身份验证



我有一个kubernetes集群。我使用Google Cloud创建了集群,但没有使用GKE,而是使用GCE。我使用VM instances创建了一个master node和两个worker nodes。CCD_ 5与CCD_ 6文件一起用于加入主节点和工作节点。我正在使用我的Vm's public ip & nodePortpostman中暴露我的集群。我可以点击那个网址。publicip:nodePort/adapter_name。命中率正在到达我的吊舱,日志正在生成。当我以前使用minikube时,我已经使用port-forwarding来公开我的端口。现在我不使用它了。

有一个名为config的默认kubeconfig文件存在于位置$HOME/.kube/config中。它包含以下内容。

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.....

服务器CCD_ 14是CCD_。我可以将此默认URL更改为身份验证所需的URL[我的rest api URL]吗??

我的要求是在kubernetes pod中运行时,为我的应用程序启用的rest api url提供身份验证。

我如何用这个kubeconfig方法或通过创建一个新的kubeconfig文件并使用它来验证我的rest api url??

https://unofficial-kubernetes.readthedocs.io/en/latest/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/

http://docs.shippable.com/deploy/tutorial/create-kubeconfig-for-self-hosted-kubernetes-cluster/

我从上面两个博客中得到了一些想法,并试图实现这些想法,但都不能满足我的要求。通过邮递员使用任何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发布。

I。加速Kubernetes API

我可以将此默认URL(集群服务器IP地址)更改为验证我的rest api URL所需的URL吗??

我不建议这样。KUBECONFIG文件用于组织有关集群、用户、命名空间、身份验证机制的信息,并存储有关您与Kubernetes集群的连接的信息。当您使用kubectl执行命令时,它会从这个KUBECONFIG中获得正确的通信信息。

KUBECONFIG中,您可以使用X509 Client Certs或不同类型的Tokens进行身份验证。更多详细信息可以在使用Kubernetes API 的身份验证策略和访问集群中找到

如果您对如何使用Beare Token访问kubernetes API感兴趣,请查看此文档。

II。加速客户端API

如果您想将端点rest api公开为公共,可以使用:

  • 节点端口

在静态端口(NodePort)暴露每个节点IP上的服务。NodePort服务路由到的ClusterIP服务将自动创建。您可以通过请求从集群外部联系NodePort服务。

  • 负载平衡器

使用云提供商的负载均衡器对外公开服务。外部负载平衡器路由到的NodePort和ClusterIP服务将自动创建。

注意:对于裸金属环境,请考虑使用Metallb

Kubernetes没有为裸机集群提供网络负载均衡器(LoadBalancer类型的服务)的实现。Kubernetes附带的Network LB的实现都是调用各种IaaS平台(GCP、AWS、Azure…)的粘合代码。如果您没有在支持的IaaS平台(GCP、AWS、Azure…)上运行,LoadBalancer在创建时将无限期地保持"挂起"状态。

一旦你将你的api暴露在世界之外(如果必要的话)

  • 您可以在客户端和服务器(api)端点之间使用双向TLS身份验证。

  • 您可以将Ingress与外部OAUTH身份验证一起使用

作为另一种解决方案,您可以将Key斗篷视为额外的身份验证,并将rest api中的Gatekeeper视为验证是否存在身份验证的sidecare。

如果你对微服务之间的身份验证感兴趣,你可以使用Kubernetes identities文章查看微服务间的身份验证。

如果您对istio感兴趣,请查看istio SecurityIstio提供两种类型的身份验证:

  • 对等身份验证:用于服务到服务的身份验证,以验证建立连接的客户端
  • 请求身份验证:用于最终用户身份验证,以验证附加到请求的凭据。Istio通过JSON Web Token(JWT)验证实现请求级身份验证,并使用自定义身份验证提供程序或任何OpenID Connect提供程序简化开发人员体验-示例

验证客户端api/端点url的最佳方法是使用Istio

Istio安装

我在一个PDF文件中记录了通过Istio提供安全性的整个过程,我将其附在这里。Istio用于验证令牌,Key斗篷用于生成JWT令牌。

最新更新