让外部的开发机直接访问Kubernetes群集内的服务!
让外部的开发机直接访问Kubernetes群集内的服务!
1.场景
容器化+K8s编排已经是现在进行时把网站的多个项目设计为云原生(Cloud Native)或老项改造为云原生可以获得诸多能力例如无云绑定、弹性、部署环境一致性、微服务、DevOps、持续交付同时下一代微服务框架 服务网格(ServiceMesh) 也能无痛接入
博主现有项目后端开发语言为 PHP、GolangGolang做一些基础公共服务(短信、消息、搜索等)这些公共服务化的项目已经容器化PHP的项目做应用逻辑层,会调用Golang写的一些公共基础服务PHP项目中直接通过服务名调用服务
需求: PHP项目A 依赖 短信、消息、搜索这3个服务,开发人员无需在本机启动依赖的服务,通过服务直接名透明的调用开发环境dev下的服务,开发人员只需要关注PHP项目A的开发。
☆本文的方案完成了开发人员开发机透明的直接访问K8s服务,从而满足了本需求☆
需要开发机透明访的直接问Kubernetes群集内的服务本文讲的方案都适用
开发机直接访问Kubernetes群集内的服务 示意图
2.基本信息和完成的目标
2.1基本信息
开发办公内网 192.168.1.0/24开发机2 192.168.1.2
运行K8s群集的Node网络 10.2.0.0/16Node1 10.2.1.4Node2 10.2.1.8K8s 群集网络 10.3.0.0/16
部署deployment whoami服务用于测试命名空间 default (这里可以用命名空间来区分环境例如dev为开发环境)镜像 wwek/whoami服务名 whoami
Pod ip10.3.0.8在node1 10.2.1.410.3.0.70在node2 10.2.1.8

2.3完成的目标
开发机2 192.168.1.2 可以直接访问 whoami服务也就是可以直接 curl http://whomai 就可以访问服务本目标即完成需求
3.网络互通1 开发办公内网 <==> 公有云VPC(私有云内网)基础互通
开发办公内网 和 公有云VPC、私有云内网 网络互通
和公有云互通的方案公有云VPN专线(SDWAN)
私有云互通就不多讲了,很多公司内网的K8s开发测试群集和开发网络本身就是互通的
各家网络情况各有各的不同,相同的是这些有用的Tips无论是在公有云VPC、私有云、K8s群集非常关键的一点,子网网段不要冲突不要冲突、子网网段不要冲突、子网网段不要冲突做基础互通的时候善用公有云的VPC和路由配置功能甚至你可以不用买公有云自带的VPN网关服务,直接配合VPC路由表用一台VM充当路由器网关、VPN网关开发测试环境下用zerotier来打通各个内网性价比极高
最终要完成是 开发办公内网 和 公有云VPC(私有云内网) 基础互通
4.网络互通2 开发办公内网 <==> K8s群集内部Pod和Service网络
☆☆☆ K8s Node本身是直接可以访问K8s群集内部Pod网络的!☆☆☆在Node1上用ping/curl测试 whoami服务 分布在2个Node的2个Pod可以看到,whoami的2个pod ip都能ping通,用curl测试也能访问到
通过Edge Node互通K8s群集和开发办公之间的网络那么用Node1作为 开发办公内网 和 K8s群集内部网络的“连接”点我们把这个Node1节点叫做 边缘节点(Edge Node)边缘节点(Edge Node)可以在运行K8s群集中Node中随便选一个这里选择Node1,他的网卡信息如下eth0 vm网卡 ip 10.2.1.4cbr0 K8s群集创建的网卡 ip 10.3.0.1
可以有2种方式方式1 在 Edge Node eth0 上启用NAT 这样其他的子网的访问在K8s群集中看到的IP是 10.2.1.4方式2 K8s群集子网和开发办公内网完全对等互通(公有云VPC路由表、开发办公网络路由表配合做)
完成后开发办公网络中 在开发机2 192.168.1.2 ping/curl K8s群集中的pod ip可ping/curl 属于whoami的2个Pod ip
㊗️网络搞通了,那么再解决DNS解析的问题就可以了
5.打通K8s群集中的DNS (开发办公内网的DNS,设置K8s中KubeDns为上游DNS)
在Edge Node1上可以直接访问到KubeDns
kubectl get svc -n kube-system
#kube-dns ip 10.3.254.107复制代码
那么在Edge Node1上面装一个DNS Server做个中间转发(使用CoreDNS)开发网络中的电脑无法直接使用kube-dns,非Edge Node解析结果为空所以需要在Edge Node1上转一个 DNS Server 做一个ProxyCoreDNS的安装使用参考我的另外一篇文章使用CoreDNS作为你的内网DNS服务器可用CoreDNS配置文件参考/etc/coredns/Corefile
# kubernetes设置
cluster.local:53 {
# kube-dns
forward . 10.3.254.107:53
log
errors
#debug
}
# 默认设置
.:53 {
# 先走本机的hosts
# https://coredns.io/plugins/hosts/
hosts {
# 自定义sms.service search.service 的解析
# 因为解析的域名少我们这里直接用hosts插件即可完成需求
# 如果有大量自定义域名解析那么建议用file插件使用 符合RFC 1035规范的DNS解析配置文件
#10.6.6.2 servicename
# ttl
ttl 60
# 重载hosts配置
reload 1m
# 继续执行
fallthrough
}
# file enables serving zone data from an RFC 1035-style master file.
# https://coredns.io/plugins/file/
# file service.signed service
# 最后所有的都转发到系统配置的上游dns服务器去解析
forward . /etc/resolv.conf
# 缓存时间ttl s
#cache 6
# 自动重新加载配置文件的间隔时间
reload 6s
# 输出日志
log
# 输出错误
errors
#debug
}复制代码
启动CoreDNS
dig @10.2.1.4 whoami.default.svc.cluster.local
# 测试下确保可以解析复制代码
在 开发机2配置DNS为 Edge Node1 IP 10.2.1.4配置搜索域为 default.svc.cluster.local
这个2个配置可以在开发办公网络中的DHCP服务器上统一配置

来测试下DNS解析 curl访问
6.关键实现总结
- 网络互通1 开发办公内网 <==> 公有云VPC(私有云内网)基础互通
- 网络互通2 开发办公内网 <==> K8s群集内部Pod和Service网络(通过Edge Node)
- 打通K8s群集中的DNS (开发办公内网的DNS,设置K8s中KubeDns为上游DNS)
- 开发机DNS配置 Edge Node DNS 和 搜索域设置default.svc.cluster.local
7.QA
问1:这也太复杂了吧,有没有简单点的?答:解决的目标不同
如果只是单纯的能访问k8s中的服务有以下的方式访问K8s中的服务还有这些方式telepresence (快速,本地开发面向k8s的微服务)K8s中装个openvpn 拨入群集内网络K8s自带的服务暴露方式 NodePort Ingress
这些方法在一个应用有多个服务依赖的时候无法做到让所有开发人员透明的直接通过服务名调用
为了做到对多个开发人员透明,所有人都不需要安装项目依赖的服务,只需要运行项目本身,本项目透明的调用依赖的服务。所以才有了本文的“复杂”方案
问2:这样直通了暴露K8s群集后岂不是不安全?答:是的,但是可以解决,我是这么解决的K8s群集分为线上和线下实现了隔离线上为准生产、生产,线下为开发、测试k8s中可以用命名空间(namespace)来做环境的区分dev、testing、staging、prod
问题3:开发机中DNS用K8s的DNS作为上游后网站的CDN乱解析了!答:开发办公网络和公有云的网络运营商和地理位置都不同,也就是如果网络出口不一样这会导致CDN解析的IP是错的
需要在开发办公网络也部署一个DNS Server成为二级DNS开发办公网络 开发机设置DNS为这个二级DNScluster.local转发到 Edge Node DNS上其他的走本地默认的DNS同样采用CoreDNS,配置文件参考
cluster.local:53 {
# Edge Node DNS
forward . 10.2.1.4:53
log
errors
#debug
}
.:53 {
....
}复制代码
私有云或者自己在开发办公网络部署的K8s群集,因为是同一个网络出口那么网站的DNS解析应该不会有问题
流水理鱼 发布!
让外部的开发机直接访问Kubernetes群集内的服务!的更多相关文章
- CentOS6.5(4)----宿主机无法访问虚拟机中的web服务解决方案
宿主机无法访问虚拟机中的web服务 在Windows7宿主机中的VMware虚拟机中安装了CentOS6.5操作系统,并且基于Nginx搭建了Web服务器,网页刚刚搭建好的时候,通过宿主机的浏览器可以 ...
- kind:Kubernetes in Docker,单机测试 Kubernetes 群集的最佳方案
请访问原文发布链接:https://sysin.org/article/kind/,查看最新版. 作者:gc(at)sysin.org,主页:www.sysin.org 2021.04.28 更新,k ...
- 【转载】浅析从外部访问 Kubernetes 集群中应用的几种方式
一般情况下,Kubernetes 的 Cluster Network 是属于私有网络,只能在 Cluster Network 内部才能访问部署的应用.那么如何才能将 Kubernetes 集群中的应用 ...
- 开发环境下的 Kubernetes 容器网络演进之路
马蜂窝技术原创文章,更多干货请搜索公众号:mfwtech 使用 Docker+Kubernetes 来简化开发人员的工作流,使应用更加快速地迭代,缩短发布周期,在很多研发团队中已经是常见的做法. 如果 ...
- win10下vagrant+centos7 rails虚拟开发机配置流程
此文写于2017.8.21 在写本文前,笔者已经尝试了多种其他的替代方法,例如wmware虚拟机安装kylin.然而发现总是还有各种问题.经大佬指点安装了virtualbox + vagrant.于是 ...
- 开发机直连 Docker 中的 Redis 容器小教程
在笔者日常开发中,都是把redis装在windows系统中.虽然可以通过RedisDesktopManager等客户端工具连接操作redis,但是还是觉得low了一些.因为作为程序员,我可能更想在Li ...
- 解决宿主机不能访问虚拟机CentOS中的站点 | 更新CentOS防火墙设置开启80端口访问
前阵子在虚拟机上装好了centos6.0,并配好了nginx+php+mysql,但是本机就是无法访问.一直就没去折腾了. 具体情况如下 1.本机能ping通虚拟机 2.虚拟机也能ping通本机 3. ...
- 开发机多用户 xdebug 远程调试 PhpStorm
在公司都用的远程开发机开发,每次有错误调试就得dd(xxx)然后保存真是,让我在本地开发用惯xdebug的情何以堪,所以有了下文. 1.安装配置xdebug 直接使用pecl安装即可 # pecl i ...
- wampserver2.5 apache2.4.9:forbidden,本机可以访问,局域网内部能访问。
wampserver2.5 apache2.4.9:forbidden,本机可以访问,局域网内部能访问. 因为做项目,多人分工,需要局域网内访问各自的项目. 然后安装了wampserver2.5,Ap ...
随机推荐
- Bootstrap——面包屑导航(Breadcrumbs)
面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式. Bootstrap 中的面包屑导航(Breadcrumbs)是一个简单的带有 .breadcrumb 类的无序列表. <o ...
- PHP的两种选择防止sql注入
1.使用PDO: $stmt = $pdo->prepare('SELECT * FROM user WHERE name = :name'); $stmt->execute(array( ...
- Git的使用和基本概念理解
参考:https://www.liaoxuefeng.com/wiki/896043488029600 一).git的使用: 1.创建版本库(Resopsitory),相当于一个目录,目录中所有的文件 ...
- 读懂JWT的使用,你就会用PHP如何实现了
要如何用php实现JWT认证,那我们首先就来认识一下什么是JWT.什么是JWTJWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准.JWT的声明一般被 ...
- RNN-LSTM讲解-基于tensorflow实现
cnn卷积神经网络在前面已经有所了解了,目前博主也使用它进行了一个图像分类问题,基于kaggle里面的food-101进行的图像识别,识别率有点感人,基于数据集的关系,大致来说还可行.下面我就继续学习 ...
- Asis CTF 2016 b00ks理解
---恢复内容开始--- 最近在学习堆的off by one,其中遇到这道题,萌新的我弄了大半天才搞懂,网上的很多wp都不是特别详细,都得自己好好调试. 首先,这题目是一个常见的图书馆管理系统,虽然我 ...
- Code Helper占用大量CPU和内存
项目架构: React+TS+DVA 设备及软件: 设备:Mac 软件:VSCode 场景: 在Mac中使用VSCode运行时发现项目编译非常卡顿,时间长达五六分钟以上,并且项目启动后访问页面,页面也 ...
- nmap中的详细命令
nmap全部参数详解-A 综合性扫描端口:80http 443https 53dns 25smtp 22ssh 23telnet20.21ftp 110pop3 119nntp 143imap 179 ...
- Navicat Premium 12连接ubuntu18 ,Mysql 5.7.27-0
1,搭建好mysql服务器,cd /etc/mysql/mysql.conf.d,进入mysql配置目录,vim mysqld.cnf 2,注释掉,bind-address =127.0.0.1 , ...
- ubuntu windows mutual remote control
Win10 remote control Ubuntu18 Part1.ubuntu settings 1.安装所需组件 sudo apt-get update //若没有desktop sharin ...