pods 无法访问 kubernetes clusterIP 服务 (10.96.0.1)
pods can't access to kubernets clusterIP service (10.96.0.1)
最近我确实在我的旧双核 AMD 机器上使用 kubeadm
安装了 kubernetes,使用了 bionic ubuntu 和 lxc。
这是我在网上找到的 lxc 个人资料:
config:
limits.cpu: "2"
limits.memory: 2GB
limits.memory.swap: "false"
linux.kernel_modules: nf_conntrack_ipv4,ip_tables,ip6_tables,netlink_diag,nf_nat,overlay,br_netfilter
raw.lxc: "lxc.apparmor.profile=unconfined\nlxc.cap.drop= \nlxc.cgroup.devices.allow=a\nlxc.mount.auto=proc:rw
sys:rw"
security.nesting: "true"
security.privileged: "true"
description: LXD profile for Kubernetes
devices:
eth0:
name: eth0
nictype: bridged
parent: lxdbr0
type: nic
root:
path: /
pool: default
type: disk
name: k8s
used_by:
- /1.0/containers/kmaster1
- /1.0/containers/kworker1
我做到了 运行:
# mount --make-rshared /
# lxc config device add "kmaster1" "kmsg" unix-char source="/dev/kmsg" path="/dev/kmsg"
# lxc config device add "kworker1" "kmsg" unix-char source="/dev/kmsg" path="/dev/kmsg"
kube-proxy
无法 运行 因为此错误消息:
write /sys/module/nf_conntrack/parameters/hashsize: operation not supported
所以我确实通过编辑 kube-proxy
配置修复了它,并将连接跟踪设置为零。
之后我确实将 flannel
部署为 cni。
我的 pods 现在无法访问默认集群 IP 10.96.0.1,但是服务在那里:
#kubectl describe svc kubernetes
Name: kubernetes
Namespace: default
Labels: component=apiserver
provider=kubernetes
Annotations: <none>
Selector: <none>
Type: ClusterIP
IP Families: <none>
IP: 10.96.0.1
IPs: 10.96.0.1
Port: https 443/TCP
TargetPort: 6443/TCP
Endpoints: 10.46.157.182:6443
Session Affinity: None
Events: <none>
可能禁用连接跟踪会产生问题并且正在使用 NAT
,我不知道。
有解决办法吗?
我分两步解决了这个问题:
首先,我确实将 kube-proxy
配置更改为默认配置。
然后我确实向 HOST 的 /sys/module/nf_conntrack/parameters/hashsize
手动写入了 kube-proxy 所需的哈希大小。然后删除 kube-proxy pods 并让它部署自动重新创建主题。
主要问题是 Flannel
配置。 flannel 部署不查找我的集群默认 ip 范围并设置它的 ip 范围 10.244.0.0/16
所以我确实编辑了它的配置并将其更改为我的范围:
kubectl edit cm -n kube-system kube-flannel-cfg
再一次,删除所有 flannel pods 并让部署自动重新创建它们。
现在我的 pod 可以访问 kubernetes 默认的 clusterIP 服务。
最近我确实在我的旧双核 AMD 机器上使用 kubeadm
安装了 kubernetes,使用了 bionic ubuntu 和 lxc。
这是我在网上找到的 lxc 个人资料:
config:
limits.cpu: "2"
limits.memory: 2GB
limits.memory.swap: "false"
linux.kernel_modules: nf_conntrack_ipv4,ip_tables,ip6_tables,netlink_diag,nf_nat,overlay,br_netfilter
raw.lxc: "lxc.apparmor.profile=unconfined\nlxc.cap.drop= \nlxc.cgroup.devices.allow=a\nlxc.mount.auto=proc:rw
sys:rw"
security.nesting: "true"
security.privileged: "true"
description: LXD profile for Kubernetes
devices:
eth0:
name: eth0
nictype: bridged
parent: lxdbr0
type: nic
root:
path: /
pool: default
type: disk
name: k8s
used_by:
- /1.0/containers/kmaster1
- /1.0/containers/kworker1
我做到了 运行:
# mount --make-rshared /
# lxc config device add "kmaster1" "kmsg" unix-char source="/dev/kmsg" path="/dev/kmsg"
# lxc config device add "kworker1" "kmsg" unix-char source="/dev/kmsg" path="/dev/kmsg"
kube-proxy
无法 运行 因为此错误消息:
write /sys/module/nf_conntrack/parameters/hashsize: operation not supported
所以我确实通过编辑 kube-proxy
配置修复了它,并将连接跟踪设置为零。
之后我确实将 flannel
部署为 cni。
我的 pods 现在无法访问默认集群 IP 10.96.0.1,但是服务在那里:
#kubectl describe svc kubernetes
Name: kubernetes
Namespace: default
Labels: component=apiserver
provider=kubernetes
Annotations: <none>
Selector: <none>
Type: ClusterIP
IP Families: <none>
IP: 10.96.0.1
IPs: 10.96.0.1
Port: https 443/TCP
TargetPort: 6443/TCP
Endpoints: 10.46.157.182:6443
Session Affinity: None
Events: <none>
可能禁用连接跟踪会产生问题并且正在使用 NAT
,我不知道。
有解决办法吗?
我分两步解决了这个问题:
首先,我确实将 kube-proxy
配置更改为默认配置。
然后我确实向 HOST 的 /sys/module/nf_conntrack/parameters/hashsize
手动写入了 kube-proxy 所需的哈希大小。然后删除 kube-proxy pods 并让它部署自动重新创建主题。
主要问题是 Flannel
配置。 flannel 部署不查找我的集群默认 ip 范围并设置它的 ip 范围 10.244.0.0/16
所以我确实编辑了它的配置并将其更改为我的范围:
kubectl edit cm -n kube-system kube-flannel-cfg
再一次,删除所有 flannel pods 并让部署自动重新创建它们。
现在我的 pod 可以访问 kubernetes 默认的 clusterIP 服务。