我已经在一些具有三个网络接口的服务器上部署了kubernetes环境。除了有关kube-apiserver的集群ip的iptables规则之外,一切都很正常。
因为所有服务器都有三个与子网相连的接口
10.0.41.0/24
10.0.42.0/24
192.168.247.0/24我只是为kube-apiserver随机挑选了一个,使apiserver与证书一起工作,并为https请求打开10.0.41.4:6443。所以apiserver是这样配置的:
KUBE_API_ADDRESS="--insecure-bind-address=10.0.41.4 --advertise-address=10.0.41.4 --bind-address=10.0.41.4"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_API_ARGS="--authorization-mode=RBAC --runtime-config=rbac.authorization.k8s.io/v1beta1 --kubelet-https=true --experimental-bootstrap-token-auth --token-auth-file=/etc/kubernetes/token.csv --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kubernetes.pem --tls-private-key-file=/etc/kubernetes/ssl/kubernetes-key.pem --client-ca-file=/etc/kubernetes/ssl/ca.pem --service-account-key-file=/etc/kubernetes/ssl/ca-key.pem --enable-swagger-ui=true --apiserver-count=3 --audit-log-maxsize=100 --audit-log-maxbackup=0 --audit-log-path=/home/kube/audit.log --event-ttl=1h --runtime-config=batch/v2alpha1=true"
...kubelet和kube-proxy是这样开始的
/usr/bin/kubelet --logtostderr=true --v=0 --api-servers=http://10.0.41.4:8080 --address=10.0.41.1 --hostname-override=10.0.41.1 --allow-privileged=true --cgroup-driver=systemd --cluster-dns=10.254.0.2 --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --require-kubeconfig --cert-dir=/etc/kubernetes/ssl --cluster-domain=cluster.local. --hairpin-mode promiscuous-bridge --serialize-image-pulls=false --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin --node-ip=10.0.41.1
/usr/bin/kube-proxy --logtostderr=true --v=0 --bind-address=10.0.41.1 --hostname-override=10.0.41.1 --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig --cluster-cidr=10.254.0.0/16有时,我不能将10.254.0.1:443与curl连接起来,因为对于所有网络接口,都会有一些iptables nat规则,其中包含最新的和随机的模块
Chain KUBE-SVC-NPX46M4PTMTKRN6Y (1 references)
pkts bytes target prot opt in out source destination
0 0 KUBE-SEP-FA7AX7V3VYKS4DYK all -- * * 0.0.0.0/0 0.0.0.0/0 /* default/kubernetes:https */ recent: CHECK seconds: 10800 reap name: KUBE-SEP-FA7AX7V3VYKS4DYK side: source mask: 255.255.255.255
0 0 KUBE-SEP-WRH6L36KL6VQULQ6 all -- * * 0.0.0.0/0 0.0.0.0/0 /* default/kubernetes:https */ recent: CHECK seconds: 10800 reap name: KUBE-SEP-WRH6L36KL6VQULQ6 side: source mask: 255.255.255.255
0 0 KUBE-SEP-NQ46EZO2HBXVI7ID all -- * * 0.0.0.0/0 0.0.0.0/0 /* default/kubernetes:https */ recent: CHECK seconds: 10800 reap name: KUBE-SEP-NQ46EZO2HBXVI7ID side: source mask: 255.255.255.255
0 0 KUBE-SEP-FA7AX7V3VYKS4DYK all -- * * 0.0.0.0/0 0.0.0.0/0 /* default/kubernetes:https */ statistic mode random probability 0.33332999982
0 0 KUBE-SEP-WRH6L36KL6VQULQ6 all -- * * 0.0.0.0/0 0.0.0.0/0 /* default/kubernetes:https */ statistic mode random probability 0.50000000000
0 0 KUBE-SEP-NQ46EZO2HBXVI7ID all -- * * 0.0.0.0/0 0.0.0.0/0 /* default/kubernetes:https */
Chain KUBE-SEP-FA7AX7V3VYKS4DYK (2 references)
pkts bytes target prot opt in out source destination
0 0 KUBE-MARK-MASQ all -- * * 10.0.41.4 0.0.0.0/0 /* default/kubernetes:https */
0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 /* default/kubernetes:https */ recent: SET name: KUBE-SEP-FA7AX7V3VYKS4DYK side: source mask: 255.255.255.255 tcp to:10.0.41.4:6443
Chain KUBE-SEP-NQ46EZO2HBXVI7ID (2 references)
pkts bytes target prot opt in out source destination
0 0 KUBE-MARK-MASQ all -- * * 192.168.247.19 0.0.0.0/0 /* default/kubernetes:https */
0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 /* default/kubernetes:https */ recent: SET name: KUBE-SEP-NQ46EZO2HBXVI7ID side: source mask: 255.255.255.255 tcp to:192.168.247.19:6443
Chain KUBE-SEP-WRH6L36KL6VQULQ6 (2 references)
pkts bytes target prot opt in out source destination
0 0 KUBE-MARK-MASQ all -- * * 10.0.42.4 0.0.0.0/0 /* default/kubernetes:https */
0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 /* default/kubernetes:https */ recent: SET name: KUBE-SEP-WRH6L36KL6VQULQ6 side: source mask: 255.255.255.255 tcp to:10.0.42.4:6443只有当iptables将其设置为10.0.41.4:6443时,才能连接10.254.0.1:443。其他服务,我指的是用于测试的nginx服务器,可以一直连接。因为ip提供了网络插件(calico),而且是唯一的。
现在我的问题是,我能做些什么来让kube-proxy或kubelet或其他东西在10.0.41.0/24的界面上工作?
我已尝试删除不需要的iptables规则,但它们将立即恢复。可悲的是,它不起作用。
我还检查了this中kube*的参数,但一无所获。
发布于 2017-09-21 09:58:26
好了,我想我找到原因了。该问题是由'--apiserver-count‘参数引起的。
当我将'--apiserver-count‘设置为3时,kube-apiserver将为名为'kubernetes’的服务收集多个接口(而不是3个,也许是2个)作为端点。kube-proxy将为每个端点添加iptables nat规则。删除'--apiserver-count‘可以修复它。
因此kube-proxy运行得很好,我认为这可能是kube-apiserver的一个错误。
https://stackoverflow.com/questions/45959149
复制相似问题