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. hdu-2544 最短路(SPFA)

    SPFA整体过程 1.用一个队列queue支撑. 2.dis[i]表示目前x到i的距离. 3.b[i]表示i是否在q中. 4.清空队列while(q.size()) q.pop();. 5.初始化(把 ...

  2. fabric学习笔记8

    fabric学习笔记8 20201303张奕博 2023.1.19 具体结构: Wallet中的X.509数字证书将组织和持有者联系起来,使得持有者能够有权限连接到网络,不同的持有者身份拥有不同的权限 ...

  3. C++用递归实现求解相关函数

    //递归实现Hanoi塔问题#include<iostream>#include<cstdlib>using namespace std;#define MAXSIZE 100 ...

  4. Vuex 部分

    Vuex 部分 官网链接 https://vuex.vuejs.org/zh/ 先说一下vuex到底是什么? vuex 是一个专门为vue.js应用程序开发的状态管理模式. 这个状态我们可以理解为在d ...

  5. Vue项目使用/deep/报错:SassError: expected selector解决方案--亲测有效

    项目npm run dev报错如下: 解决方法: 尝试用 ::v-deep 替换 /deep/ ,成功解决了问题. 效果如下图所示(完美解决~) 某些预处理器(例如Sass)可能无法>>& ...

  6. 杭电oj 进制转换

    Problem Description 输入一个十进制数N,将它转换成R进制数输出.   Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=1 ...

  7. postman-增加全局环境变量

    var jsonData = pm.response.json(); var accessTokenForMip = jsonData.data.access_token; //tests[acces ...

  8. docker创建etcd

    创建docker-compose.yml version: "3.5" services: etcd: hostname: etcd image: bitnami/etcd:3 d ...

  9. c-->static关键字的使用

    static关键字的使用 static:静态 未使用static 在下列代码中变量a是有生命周期的,调用完后就会被销毁 所以for循环每次调用test函数打印的结果都是2 #include <s ...

  10. BlendCAC: A Smart Contract Enabled Decentralized Capability-Based Access Control Mechanism for the IoT

    摘要 BlendCAC,它是一种分散的.基于联合能力的 AC 机制,可有效保护大规模物联网系统中的设备.服务和信息.引入了基于联合能力的委托模型 (FCDM) 以支持分层和多跳委托.探索了委托授权和撤 ...