K8S实现不同节点POD获取不同IP

  1. 背景介绍
    某混合云场景k8s,云上和云下的node,需要将同一个域名解析到不同的IP
  2. 方案
    利用Coredns+2个第三方插件,fwdpolicyconditional
  3. 编译Coredns(在windows上)
    安装go(略)

    下载各组件源码,并编译
    cd %GOPATH%/src
    git clone https://github.com/coredns/coredns
    cd coredns/
    notepad plugin.cfg添加如下两行

这一步要保证GOOS=windows

go generate

这一步要保证GOOS=linux

go build
在当前目录会生产coredns文件。

在linux环境运行 coredns --pulgins 查看插件是否已启用。
4. 构建Docker镜像,替换环境中已有的coredns镜像

Dockerfile
FROM alpine:3.14
ADD https://oss.xxx.com/coredns .
EXPOSE 53 53/udp
RUN chmod +x coredns
ENTRYPOINT ["/coredns"]
  1. 修改配置文件
apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
  labels:
      addonmanager.kubernetes.io/mode: EnsureExists
data:
  Corefile: |
    .:53 {
        errors
        ready
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
        }
        hosts {
            172.20.0.4     iZ88wwyb52mZ
            172.20.0.5     iZ88r6821f9Z
            172.20.0.6     iZ885t6kiqoZ
            fallthrough
        }
        log
        prometheus :9153
        conditional {
          group idc 0
          group guangdianyun 1
          use zone0 if incidr(client_ip, '10.244.0.0/21')
          use zone0 if incidr(client_ip, '10.244.8.0/23')
          use zone0 idc if incidr(client_ip, '10.244.10.0/24')
          use zone0 if incidr(client_ip, '10.244.12.0/24')
          use zone0 if incidr(client_ip, '10.244.13.0/24')
          use zone0 if incidr(client_ip, '10.244.14.0/24')
          use zone0 if incidr(client_ip, '10.244.14.0/24')
          use zone1 if incidr(client_ip, '10.244.32.0/24')
          use zone1 if incidr(client_ip, '10.244.30.0/24')
          use zone1 if incidr(client_ip, '10.244.34.0/24')
          use zone1 if incidr(client_ip, '10.244.29.0/24')
          use zone1 if incidr(client_ip, '10.244.14.0/24')
          use zone1 if incidr(client_ip, '10.244.31.0/24')
          use zone1 if incidr(client_ip, '10.244.33.0/24')
          use zone1 if incidr(client_ip, '10.244.16.0/24')
        }
        fwdpolicy . 127.0.0.1:5390 127.0.0.1:5391 {
          policy conditional
        }
      }
        cache 30
        reload
        loadbalance
    }
    .:5390 {
      log
      hosts {
        172.30.254.3 xxx.cn
        172.30.254.3 xxxx.cn
      }
      forward . /etc/resolv.conf
    }
    .:5391 {
      log
      hosts {
        172.30.254.33 xxx.cn
        172.30.254.33 xxxx.cn
      }
      forward . /etc/resolv.conf
    }

参考:
https://zhuanlan.zhihu.com/p/387807927
https://github.com/coredns/coredns/discussions/4940

posted on   yangras  阅读(363)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示