我有一个kubernetes集群。我使用Google Cloud
创建了集群,但没有使用GKE,而是使用GCE。我使用VM instances
创建了一个master node
和两个worker nodes
。CCD_ 5与CCD_ 6文件一起用于加入主节点和工作节点。我正在使用我的Vm's public ip & nodePort
在postman
中暴露我的集群。我可以点击那个网址。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令牌。