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
K8S实现不同节点POD获取不同IP的更多相关文章
- k8s集群节点更换ip 或者 k8s集群添加新节点
1.需求情景:机房网络调整,突然要回收我k8s集群上一台node节点机器的ip,并调予新的ip到这台机器上,所以有了k8s集群节点更换ip一说:同时,k8s集群节点更换ip也相当于k8s集群添加新节点 ...
- k8s集群节点ping不通其他主机的ip
文章目录 排查过程 本地宿主机网络检查 pod网络检查 tcpdump检查网络 检查flannel网卡 检查宿主机网卡 iptables检查 解决方法 测试环境服务出现问题,服务一直报错认证超时,检查 ...
- 【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
背景介绍 最近的docker容器经常被kill掉,k8s中该节点的pod也被驱赶. 我有一个在主机中运行的Docker容器(也有在同一主机中运行的其他容器).该Docker容器中的应用程序将会计算数据 ...
- Kubernetes K8S之固定节点nodeName和nodeSelector调度详解
Kubernetes K8S之固定节点nodeName和nodeSelector调度详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-mas ...
- k8s核心资源之Pod概念&入门使用讲解(三)
目录 1. k8s核心资源之Pod 1.1 什么是Pod? 1.2 Pod如何管理多个容器? 1.3 Pod网络 1.4 Pod存储 1.5 Pod工作方式 1.5.1 自主式Pod 1.5.2 控制 ...
- 12.深入k8s:kubelet创建pod流程源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 在上一篇中,我们知道在kubelet中,工作核心就是围绕着整个syn ...
- k8s集群Job Pod 容器可能因为多种原因失效,想要更加稳定的使用Job负载,有哪些需要注意的地方?
k8s集群Job Pod 容器可能因为多种原因失效,想要更加稳定的使用Job负载,有哪些需要注意的地方? 面试官:"计数性Job默认完成模式是什么?Indexed模式如何发布自定义索引呢?& ...
- k8s运维之pod排错
k8s运维之pod排错 K8S是一个开源的,用于管理云平台中多个主机上的容器化应用,Kubernetes的目标是让部署容器化变得简单并且高效 K8S的核心优势: 1,基于yaml文件实现容器的自动创建 ...
- CDN 环境下获取用户IP方法
CDN 环境下获取用户IP方法 1 cdn 自定义header头的X-Real-IP,在后端使用$http_x_real_ip获得 proxy_set_header X-Real-IP $remote ...
- 微服务探索之路04篇k8s增加子节点,metrics资源监控,ingress-nginx域名配置及https配置
1 k8s增加子节点 1.1 子节点服务器安装docker,使用脚本自动安装 curl -fsSL https://get.docker.com | bash -s docker --mirror A ...
随机推荐
- VUE环境运行搭建
第一步:下载安装node.js 1.下载node.js,vue的运行是要依赖于node的npm的管理工具来实现,所以第一步我们需要安装 Node.js,访问官网 https://nodejs.org/ ...
- vue模板三目运算判断报错
问题: 关于vue三目运算符提示报错 1.三目运算符等于判断 {{ a==b ? '是' : '否'}} 2.其他三目运算符 <代表小于号(<) >代表大于符号(>) ≤表示小 ...
- JS中面向对象的多种继承方式
JS本身是基于面向对象开发的编程语言,面向对象开发中最重要的一个概念就是类. 类具有三大特性:封装.继承.多态 封装:类也是个函数,函数的目的是把一个功能代码进行封装,以此实现"低耦合高内聚 ...
- Docker - Can't resolve instance hostname.
Docker容器无法解析主实例主机名 在为redis集群搭建哨兵的时候遇到这个异常 解决方案:在配置文件中添加: ALLOW_EMPTY_PASSWORD=yes 参考文档:linux - redis ...
- 安全测试-WEB安全渗透测试基础知识(一)
1.1. Web技术演化 1.1.1. 静态页面 在互联网最初开始的时候,Web网站的主要内容是静态的,由文字和图片组成,制作和表现形式也是以表格为主.当时的用户行为也非常简单,仅仅是浏览网页. ...
- vue3中读取本地excel文件内容
背景 做后台项目时避免不了excel文件上传,有的还要求对文件内容做校验,或者把文件内容转成数据上传保存. 操作 1.引入xlsx插件,最好安装指定版本,否则会报错 npm i xlsx@0.16.0 ...
- kubeSphere v3.3.0+kubernetes v1.22.10 集群部署
概述 KubeSphere 是 GitHub 上的一个开源项目,是成千上万名社区用户的聚集地.很多用户都在使用 KubeSphere 运行工作负载.对于在 Linux 上的安装,KubeSphere ...
- 用keil调试程序的时候,一点击调试就弹出STARTUP.A51那个窗口,解决办法
前天晚上我折腾了很久 网上查了各种方法.最终自己发现,调试之前一定要在keil编译一遍,再debug这样就不会弹窗了. 另外,keil在调试过程中,修改代码是不会有任何作用的,你看我故意写错,继续单步 ...
- 【QT】打包QT程序
发布QT程序时需要把依赖的库拷贝到程序所在文件夹下,可以使用如下方式: 命令行输入cmd,cd 到程序所在文件夹,输入windeployqt xx.exe --release 注xx.exe是程序的名 ...
- 关于MYSQL知识点复习
关于MYSQL关联查询JOIN: https://www.cnblogs.com/withscorpion/p/9454490.html