1

我有一个安装在 Amazon EC2 实例中的 k8s 集群,我想使用 GitLab 配置 CI。为此,GitLab 向我请求了 Kubernetes API URL。

我跑去kubectl cluster-info获取请求的信息,我可以看到 3 行:

我想这需要 Kubernetes 主 URL,但它是一个私有 IP。如何正确公开 API?

有任何想法吗 ?

4

2 回答 2

3

为了更好的安全性,保持 kubernetes 主节点的 IP 为私有,并使用 AWS 提供的 LoadBalancer 来公开 Kubernetes API 服务器。您还可以在 LoadBalancer 上配置 TLS 终止。

于 2020-05-18T14:59:48.510 回答
0

使用kubectl config view获取服务器地址,它看起来像 server: https://172.26.2.101:6443

首先,您需要将主节点的公共 IP 或负载均衡器(如果有)定义为 DNS 替代方案。你可以这样做,

删除当前的 apiserver 证书

sudo rm /etc/kubernetes/pki/apiserver.*

生成新证书

sudo kubeadm init phase certs apiserver --apiserver-cert-extra-sans=<public_ip>

然后,您必须从 .kube/config 文件中获取您的管理员密钥、证书和 ca 证书

客户密钥数据:

echo -n "LS0...Cg==" | base64 -d > admin.key

客户证书数据:

echo -n "LS0...Cg==" | base64 -d > admin.crt

证书授权数据:

echo -n "LS0...Cg==" | base64 -d > ca.crt

现在您可以通过 curl 请求您的 api,例如下面的请求 pod 信息

curl https://<public_ip>:6443/api/v1/pods  \
--key admin.key \
--cert admin.crt \
--cacert ca.crt

当然,请确保您允许所需的端口

于 2021-02-20T14:09:22.117 回答