1

我有一个 Kubernetes 集群。我使用 .但不是使用 GKE 创建了集群Google Cloud,而是使用 GCE。我已经创建了一个master node和两个worker nodes使用VM instances. Kubeadm用于与kube-flannel.yml文件一起加入主节点和工作节点。我在postman使用我的Vm's public ip & nodePort. 我可以访问该 URL。publicip:nodePort/adapter_name. 命中正在到达我的 pod 并且正在生成日志。当我minikube以前使用时,我习惯于port-forwarding暴露我的端口。现在我不使用它。

kubeconfig位置中存在一个名为 config的默认文件$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.....

服务器IPhttps://10.128.0.12:6443. 我可以将此默认 URL 更改为身份验证所需的 URL [my rest api url] 吗?

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

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"} 
4

2 回答 2

1

将此发布为Community Wiki.

I. 访问 Kubernetes API。

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

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

KUBECONFIG您可以使用X509 Client Certs或不同类型的Tokens. 更多细节可以在身份验证策略使用 Kubernetes API 访问集群中找到

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

二、访问客户端 API

如果你想公开你的端点 rest api,你可以使用:

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

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

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

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

一旦你将你的 api 暴露给外界(如有必要)

作为替代解决方案,您可以将Keycloak视为额外的身份验证,在 rest api 中使用Gatekeeper作为验证是否存在身份验证的辅助功能。

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

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

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

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

Istio 安装

我在一个 PDF 文件中记录了通过 Istio 提供安全性的整个过程,我附在此处。Istio 用于验证令牌,Keycloak 用于生成 JWT 令牌。

于 2021-01-09T08:26:50.170 回答