【问题标题】:Expose kube-apiserver with additional IP address使用额外的 IP 地址公开 kube-apiserver
【发布时间】:2020-12-28 07:52:30
【问题描述】:

我在裸机集群上使用kubeadm init 设置了一个 k8s 集群。

我注意到kube-apiserver 将其接口暴露在私有 IP 上:

# kubectl get pods kube-apiserver-cluster1 -n kube-system -o wide
NAME                                        READY   STATUS    RESTARTS   AGE     IP           NODE                         NOMINATED NODE   READINESS GATES
kube-apiserver-cluster1                     1/1     Running   0          6d22h   10.11.1.99   cluster1   <none>           <none>

这是集群内的 kube 配置:

# kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://10.11.1.99: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: REDACTED
    client-key-data: REDACTED

这对于在集群本地使用kubectl 来说很好,但我想添加一个额外的接口来使用公共IP 地址公开kube-apiserver。最终,我尝试从笔记本电脑配置kubectl 以远程访问集群。

如何在外部 IP 地址上公开kube-apiserver

【问题讨论】:

    标签: kubernetes kubectl kubeadm kubernetes-apiserver kube-apiserver


    【解决方案1】:

    执行以下命令:

    $ kubeadm init --pod-network-cidr=<ip-range> --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=<PRIVATE_IP>[,<PUBLIC_IP>,...]
    

    如果您从远程使用 kubectl,请不要忘记将您的 .kube/config 中的公共 IP 替换为私有 IP。

    也可以将master节点的私网IP转发到worker节点上的master节点的公网IP。在运行 kubeadm join:
    $ sudo iptables -t nat -A OUTPUT -d &lt;Private IP of master node&gt; -j DNAT --to-destination &lt;Public IP of master node&gt; 之前在工作节点上运行此命令。 但请记住,您还必须在主节点上以相同的方式转发工作人员私有 IP,以使一切正常运行(如果它们遇到同样的问题,即被云提供商 NAT 覆盖)。

    查看更多:apiserver-ipkube-apiserver

    【讨论】:

    • 我认为您在这里所说的是我的选择如下:A)如果您第一次设置 k8s,则使用该 kudeadm init cmd,或者 B)如果您已经设置了使用 iptables 转发数据包k8s 集群。正确的?在我的情况下,我已经有 1 个主节点和 2 个工作节点,并且不想破坏我的 k8s 集群并重新开始。所以在这种情况下,我使用 iptables 将数据包从公共 IP 转发到私有 IP。对吗?
    • 好的,我发现这个命令对我有用:iptables -i eth1 -o eth0 -p tcp --dport 6443 -A FORWARD 注意:eth1 是我的公共 IP 的接口,而 eth0 是我的私有 IP 的接口。我正在使用端口 6443,因为这是 kube-apiserver 使用的端口
    • 感谢您的回答。见上面我的cmets。我接受了您的回答,因为它帮助我了解了解决此问题的方法。
    • 现在我真的很困惑。 :) 接下来我需要kubectl config set-credentials 以允许通过我的笔记本电脑使用kubectl 进行远程访问。我基本上只是将集群上的 ~/.kube/config 中的凭据复制到我的 macbook 上。我能够使用kubectl 远程访问。但是,只是为了实验,我删除了 iptable FORWARD 规则。它仍然有效!?!?
    • 也许 k8s 已经为我设置了这个:3969K 2176M KUBE-FORWARD all -- * * 0.0.0.0/0 0.0.0.0/0 /* kubernetes 转发规则 */
    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 2018-11-28
    • 1970-01-01
    • 2019-05-08
    • 2011-03-16
    • 2017-09-16
    • 1970-01-01
    • 2019-09-14
    相关资源
    最近更新 更多