K8S探索之Service+Flannel本机及跨主机网络访问原理详解

本文详细探讨了Kubernetes Service如何解决Pod重启后的IP变化问题,以及在集群内通过Service进行本机及跨主机网络访问的原理。重点解析了Service通过iptables在工作节点的访问流程,以及在主节点上通过Flannel的vxlan方式实现跨主机访问的详细步骤,包括iptables规则、Flannel网络接口和封包解包过程。文章还涵盖了网络配置、问题排查和解决方案。
摘要由CSDN通过智能技术生成

简介

在上篇中,我们部署了我们的应用,但我们访问是直接在应用所在的容器,使用IP+Port的方式直接访问的,style不够k8s,本篇文章我们将使用service和跨主机访问

内容概览

目前我们的应用大致如下:

在这里插入图片描述

我们的应用目前是部署在工作节点1上面,如上篇所示,我们可以在工作节点1上面直接使用应用容器的ip+port进行访问

➜  ~ curl http://10.244.1.8:9000/app/versionCheck\?version\=1
{"data":{"downloadUrl":null,"updateMsg":null,"latest":true},"code":200,"msg":null}#

但上面有个问题,每次重启,我们的应用ip是会变化的,也就是不固定,这样对我们访问会造成麻烦,我们不可能每次重启都去替换我们的访问ip

针对这种情况,k8s提供的解决方案是:Service

Service有一个固定的集群内访问IP,能够感知其对应的pod的ip变化,自动对应上

Service解决了Pod重启后的IP变化问题,但还有一个问题是跨主机访问问题:pod重启后,不一定在原来的node节点上,这个时候对我们访问也会带来麻烦,需要访问节点是能跨节点访问

针对跨主机访问问题,目前有很多解决方案,比如:Flannel,本篇也是基于Flannel进行探索的

整个如下图所示:

在这里插入图片描述

在工作节点和主节点上,我们都能通过service的集群IP进行访问,如下:

➜  dashboard curl http://10.103.5.88:9000/app/versionCheck\?version\=1
{
   "data":{
   "downloadUrl":null,"updateMsg":null,"latest":true},"code":200,"msg":null}

目前的概况就如上所示,接下来的我们就开始探索其中的原理,主要是两方面:

  • 1.在工作节点中,如何通过service访问到具体的应用
  • 2.主节点上没有部署有应用,是如何通过service访问到具体应用的

准备工作

本篇文章基于下面的文章:

本篇中,将应用重新部署了下,将网络插件contained换成了flanned,具体参考文章:[kubernetes] 跨云厂商使用公网IP搭建k8s v1.20.9集群

首先是参考链接配置eth0:1网卡

其他的也不复杂,我们先将之前部署的k8s卸载,然后初始化k8s集群即可

service的生成也比较简单,在Dashboard中部署的我们的应用时,设置service即可,如下图所示:

在这里插入图片描述

部署应用的时候选择service为Internal,即只集群内访问,不绑定主机节点端口,端口就填我们的应用对应端口接口:第一个端口是service的监听端口,第二个端口是pod应用的监听端口

本机内service访问原理解析

我们在工作节点1-IP:106.55.227.160上,使用service的方式访问应用:

➜ curl http://10.103.5.88:9000/app/versionCheck\?version\=1
{"data":{"downloadUrl":null,"updateMsg":null,"latest":true},"code":200,"msg":null}

通过查阅资料,其原理是使用Iptables,具体如下:

我们首先看看10.103.5.88这个ip相关的iptables规则配置

➜  ~ iptables -S -t nat |grep 10.103.5.88
-A KUBE-SERVICES -d 10.103.5.88/32 -p tcp -m comment --comment "xiuxian/auth-java:tcp-9000-9000-c8kgf cluster IP" -m tcp --dport 9000 -j KUBE-SVC-ATUXI35NVHBYDGFQ

如上所示:-d 10.103.5.88/32 + --dport 9000 :表示将访问10.103.5.88+9000端口的请求,转到链路规则KUBE-SVC-ATUXI35NVHBYDGFQ

所以我们接着看看KUBE-SVC-ATUXI35NVHBYDGFQ

➜  ~ iptables -S -t nat |grep KUBE-SVC-ATUXI35NVHBYDGFQ
-A KUBE-SVC-ATUXI35NVHBYDGFQ -m comment --comment "xiuxian/auth-java:tcp-9000-9000-c8kgf" -j KUBE-SEP-7ETKSBKARXRYVX3G

如上所示,这个又将这个请求转到了:KUBE-SEP-7ETKSBKARXRYVX3G

我们接着看KUBE-SEP-7ETKSBKARXRYVX3G

➜  ~ iptables -S -t nat |grep KUBE-SEP-7ETKSBKARXRYVX3G
-A KUBE-SEP-7ETKSBKARXRYVX3G -p tcp -m comment --comment "xiuxian/auth-java:tcp-9000-9000-c8kgf" -m tcp -j DNAT --to-destination 10.244.1.8:9000
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值