我需要部署一个作为 CCM(云控制器管理器)工作的应用程序,因此它需要能够访问主服务器。
我有一个由 Kubespray 设置的 K8S 集群,所有运行的节点均kubelet
采用 的配置/etc/kubernetes/kubelet.conf
。kubelet.conf
如下所示:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: ***
server: https://localhost:6443
name: default-cluster
contexts:
- context:
cluster: default-cluster
namespace: default
user: default-auth
name: default-context
current-context: default-context
kind: Config
preferences: {}
users:
- name: default-auth
user:
client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
client-key: /var/lib/kubelet/pki/kubelet-client-current.pem
此配置文件和证书将提供给 CCM 服务,我将以下卷和挂载点添加到部署 YAML:
containers:
- name: cloud-controller-manager
image: swisstxt/cloudstack-cloud-controller-manager:v0.0.1
# Command line arguments: https://kubernetes.io/docs/reference/command-line-tools-reference/cloud-controller-manager/
command:
- /root/cloudstack-ccm
- --cloud-provider=external-cloudstack
- --cloud-config=/config/cloud-config
- --kubeconfig=/var/lib/kubelet/kubelet.conf # Connection Params
- --v=4
volumeMounts:
- name: config-volume
mountPath: /config
- name: kubeconfig-config-file
mountPath: /var/lib/kubelet/kubelet.conf
- name: kubernetes-pki-volume
mountPath: /var/lib/kubelet/pki
- name: kubernetes-config-volume
mountPath: /var/lib/kubernetes
volumes:
- name: config-volume
configMap:
name: cloud-controller-manager-config
- name: kubeconfig-config-file
hostPath:
path: /etc/kubernetes/kubelet.conf
- name: kubernetes-pki-volume
hostPath:
path: /var/lib/kubelet/pki
- name: kubernetes-config-volume
hostPath:
path: /var/lib/kubernetes
到目前为止,一切都很好。
我的问题是我的kubelet.conf
有以下句子:.clusters.cluster.server: https://localhost:6443
。因此,kubelet
配置为通过 Kubespray 设置的代理服务器与主服务器交互,以分配主服务之间的连接。
因此,当 CCM 应用程序检查时,kubelet.conf
它知道它应该通过与主服务器通信https://localhost:6443
,但是该应用程序的 pod 内部localhost:6443
未被该代理服务器监听,所以 CCM 无法使用它localhost:6443
与主服务器通信,因为localhost:6443
只能从节点本身访问。
问题是:有没有办法让节点localhost:6443
可从 pod 访问?我目前唯一的想法是在 pod 和它运行的节点之间建立一个 SSH 隧道,但我不喜欢它,因为 (1) 它需要在所有节点上传播一些 RSA 密钥并将其添加到每个新节点上,(2) 我不知道如何从容器中找出节点的 IP 地址。
感谢您阅读这篇长篇大论。我将非常感激所有的想法和线索。