K8S实现不同节点POD获取不同IP
- 背景介绍
某混合云场景k8s,云上和云下的node,需要将同一个域名解析到不同的IP - 方案
利用Coredns+2个第三方插件,fwdpolicy,conditional - 编译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"]
- 修改配置文件
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端