k8s无法通过svc访问其他节点pod

基本环境

软件: virtualBox, 网卡配置(一张NAT[上网], 一张桥接[连接xshell])
三个node
在master上执行 deployment.yaml

[root@k8s-master01 k8s_files]$ cat deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pc-deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
        - name: nginx
          image: nginx:1.17.1
          ports:
            - containerPort: 80
[root@k8s-master01 k8s_files]$ kubectl get po -n dev -o wide
NAME                             READY   STATUS    RESTARTS   AGE   IP            NODE           NOMINATED NODE   READINESS GATES
pc-deployment-6696798b78-bbhjp   1/1     Running   0          13m   10.244.0.33   k8s-master01   <none>           <none>
pc-deployment-6696798b78-mjdrh   1/1     Running   0          13m   10.244.1.46   node1          <none>           <none>
pc-deployment-6696798b78-x9h8t   1/1     Running   0          13m   10.244.2.35   node2          <none>           <none>

但是只能访问本身节点的nginx,无法访问其它节点的pod


原因

在组网的过程中,我采用了双网卡方案,网卡1使用NAT地址转换用来访问互联网,网卡2使用桥接使得xshell可以连接虚拟机。
flannel默认使用了网卡1的 ip 地址,而网卡1的NAT地址转换是无法访问其他虚拟机的,从而导致的问题的产生。

解决

修改flannel的配置文件

sudo kubectl edit daemonset kube-flannel-ds-amd64 -n kube-system

在打开的配置文件中找到spec.template.spec.containers[0].args字段

      containers:
      - args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=enp0s8  # 添加网卡配置
        command:
        - /opt/bin/flanneld

添加 - --iface=enp0s8 其中 enp0s8是通过ifconfig 命令查到的

[root@k8s-master01 k8s_files]$ sudo kubectl edit daemonset kube-flannel-ds-amd64 -n kube-system
daemonset.apps/kube-flannel-ds-amd64 edited

使用kubectl delete pod -n kube-system ...把所有的flannel删除即可。

k8s 会自动按照你修改好的yaml配置重建flannel。

[root@k8s-master01 k8s_files]$ kubectl get po -n kube-system


[root@k8s-master01 k8s_files]$ kubectl delete po -n kube-system kube-flannel-ds-amd64-9ppcc kube-flannel-xx kube-flannel-yy

至此,问题解决。可访问其它节点的pod了。

简书-详细-k8s无法通过svc访问其他节点pod

你可能感兴趣的:(linux,kubernetes)