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

K8S实现不同节点POD获取不同IP的更多相关文章

  1. k8s集群节点更换ip 或者 k8s集群添加新节点

    1.需求情景:机房网络调整,突然要回收我k8s集群上一台node节点机器的ip,并调予新的ip到这台机器上,所以有了k8s集群节点更换ip一说:同时,k8s集群节点更换ip也相当于k8s集群添加新节点 ...

  2. k8s集群节点ping不通其他主机的ip

    文章目录 排查过程 本地宿主机网络检查 pod网络检查 tcpdump检查网络 检查flannel网卡 检查宿主机网卡 iptables检查 解决方法 测试环境服务出现问题,服务一直报错认证超时,检查 ...

  3. 【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?

    背景介绍 最近的docker容器经常被kill掉,k8s中该节点的pod也被驱赶. 我有一个在主机中运行的Docker容器(也有在同一主机中运行的其他容器).该Docker容器中的应用程序将会计算数据 ...

  4. Kubernetes K8S之固定节点nodeName和nodeSelector调度详解

    Kubernetes K8S之固定节点nodeName和nodeSelector调度详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-mas ...

  5. 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 控制 ...

  6. 12.深入k8s:kubelet创建pod流程源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 在上一篇中,我们知道在kubelet中,工作核心就是围绕着整个syn ...

  7. k8s集群Job Pod 容器可能因为多种原因失效,想要更加稳定的使用Job负载,有哪些需要注意的地方?

    k8s集群Job Pod 容器可能因为多种原因失效,想要更加稳定的使用Job负载,有哪些需要注意的地方? 面试官:"计数性Job默认完成模式是什么?Indexed模式如何发布自定义索引呢?& ...

  8. k8s运维之pod排错

    k8s运维之pod排错 K8S是一个开源的,用于管理云平台中多个主机上的容器化应用,Kubernetes的目标是让部署容器化变得简单并且高效 K8S的核心优势: 1,基于yaml文件实现容器的自动创建 ...

  9. CDN 环境下获取用户IP方法

    CDN 环境下获取用户IP方法 1 cdn 自定义header头的X-Real-IP,在后端使用$http_x_real_ip获得 proxy_set_header X-Real-IP $remote ...

  10. 微服务探索之路04篇k8s增加子节点,metrics资源监控,ingress-nginx域名配置及https配置

    1 k8s增加子节点 1.1 子节点服务器安装docker,使用脚本自动安装 curl -fsSL https://get.docker.com | bash -s docker --mirror A ...

随机推荐

  1. js中各种事件监听

    html.push('<input type="button" id="autocount_' + sysTime + '" class="la ...

  2. 这里记录一下我个人对AXI4主从模块的理解(这些理解主要来自阅读 Xilinx AXI_FULL_M_module 源码)

    先只考虑读请求: 以取指模块和内存模块为例,取指模块是发出请求的模块,因此为 Master,属于AXI4MasterModule:内存模块是响应请求的模块,因此为 Slave,属于AXI4SlaveM ...

  3. 存储型XSS的利用

    一.存储型XSS漏洞利用原理 攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码.意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本. 二.漏洞利 ...

  4. TensorFlow中使用tf.keras.callbacks.EarlyStopping防止训练过拟合

    TensorFlow tf.keras.callbacks.EarlyStopping 当模型训练次数epoch设置到100甚至更大时,如果模型的效果没有进一步提升,那么训练可以提前停止,继续训练很可 ...

  5. SQLServer 查询所有外键关联表信息

    有时候需要清除一些数据,但是总会有一些外键关联多加阻拦,下面是一些外键关联查询,方便更快捷有效的查询到需要处理的外键信息. 一.外键信息 查询列从左到右分别是: 外键约束名,子表名,外键列名,父表名 ...

  6. java 内存锁

    import lombok.extern.slf4j.Slf4j;import java.util.Map;import java.util.concurrent.ConcurrentHashMap; ...

  7. JavaSE——.replace()方法替换内容

    package com.zhao.stringtest; public class Test5 { //.replace()方法替换词汇 public static void main(String[ ...

  8. Windchill_二次开发新手入门常用的API

    Windchill_二次开发新手入门常用的API 1.根据零件名称/编码 得到该零件 wt.clients.prodmgmt.WTPartHelper.findPartByName(name) ;   ...

  9. Veeva_001常见问题总结

    1.时间互动轴:其他代表与该医生的互动记录 2.Call的拜访流程 : 用户在Ipad端先制定计划拜访(已计划:青色)后,需手动同步到服务器上: 进入拜访详细,选择联系人和产品及相关拜访信息等,并'保 ...

  10. JAVA诞生历史【转载】

    一.计算机语言的发展史 1.第一代语言(只有机器能读懂,人根本读不懂) 纯机器语言 2.第二代语言(机器能读懂,人可以读懂,但是很难懂) 汇编语言(符号语言) 3.第三代语言(机器能读懂,也非常便于人 ...