11-k8s-service网络

news2024/11/19 16:32:49

文章目录

    • 一、网络相关资源介绍
    • 二、开启ipvs
    • 三、nginx网络示例
    • 四、pod之间的访问示例
    • 五、service反向代理示例

一、网络相关资源介绍

  1. Servcie介绍

    Service是对一组提供相同功能的Pods的抽象,并为它们提供一个统一的入口。借助Service,应用可以方便的实现服务发现与负载均衡,并实现应用的零宕机升级。Service通过标签来选取服务后端,一般配合Replication Controller或者Deployment来保证后端容器的正常运行。这些匹配标签的Pod IP和端口列表组成endpoints,由kubeproxy负责将服务IP负载均衡到这些endpoints上。即service不会直接到pod,service是直接到endpoint资源,就是地址加端口,再由endpoint再关联到pod。

  2. Endpoint介绍

    Endpoint主要记录了每个pod的IP地址信息,当Pod的IP发生变化时,endpoints会进行更新。当我们创建Service的时候,会自动生成一个Endpoint。

  3. Service的四种类型

    • ClusterIP:默认类型,自动分配一个仅cluster内部可以访问的虚拟IP

    • NodePort:通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务,以便外部可以通过端口访问到该服务。

      如果不指定会随机指定端口,端口范围:30000~32767,端口范围配置在/usr/lib/systemd/system/kube-apiserver.service文件中

    • LoadBalancer:使用云提供商的负载均衡器,可以向外部暴露服务。外部的负载均衡器可以路由到 NodePort 服务和 ClusterIP 服务。

    • ExternalName:将服务通过DNS CNAME记录方式转发到指定的域名(通过 spec.externlName 设定) 。需要kube-dns版本在1.7以上。

  4. kube-proxy

    Service在很多情况下只是一个概念,真正起作用的其实是kube-proxy服务进程,每个Node节点上都运行着一个kube-proxy服务进程。当创建Service的时候会通过api-server向etcd写入创建的service的信息,而kube-proxy会基于监听的机制发现这种Service的变动,然后它会将最新的Service信息转换成对应的访问规则
    在这里插入图片描述

    kube-proxy目前支持三种工作模式:

    • userspace :userspace模式下,kube-proxy会为每一个Service创建一个监听端口,发向Cluster IP的请求被Iptables规则重定向到kube-proxy监听的端口上,kube-proxy根据LB算法选择一个提供服务的Pod并和其建立链接,以将请求转发到Pod上。 该模式下,kube-proxy充当了一个四层负责均衡器的角色。由于kube-proxy运行在userspace中,在进行转发处理时会增加内核和用户空间之间的数据拷贝,虽然比较稳定,但是效率比较低。
    • iptables:iptables模式下,kube-proxy为service后端的每个Pod创建对应的iptables规则,直接将发向Cluster IP的请求重定向到一个Pod IP。 该模式下kube-proxy不承担四层负责均衡器的角色,只负责创建iptables规则。该模式的优点是较userspace模式效率更高,但不能提供灵活的LB策略,当后端Pod不可用时也无法进行重试。
    • ipvs 模式(推荐):ipvs模式和iptables类似,kube-proxy监控Pod的变化并创建相应的ipvs规则。ipvs相对iptables转发效率更高。除此以外,ipvs支持更多的LB算法。

二、开启ipvs

ps:master节点操作

  1. 查看未开启状态:ipvsadm -Ln
    在这里插入图片描述

  2. 在Master节点修改,将mode: " "修改为mode: “ipvs”:kubectl edit -n kube-system cm kube-proxy

  3. 查看kube-system命名空间下的kube-proxy:kubectl get pod -n kube-system
    在这里插入图片描述

  4. 删除:kubectl get pod -n kube-system |grep kube-proxy |awk ‘{system(“kubectl delete pod “$1” -n kube-system”)}’

  5. 删除后,k8s会自动再次生成,新生成的kube-proxy会采用刚刚配置的ipvs模式,再次查看:kubectl get pod -n kube-system

  6. 查看启动方式

    kubectl get pod -n kube-system | grep kube-proxy
    kubectl logs -n kube-system kube-proxy-4c5xj
    

在这里插入图片描述

  1. 再次查看:ipvsadm -Ln
    在这里插入图片描述

三、nginx网络示例

ps:master节点操作

  1. 部署:kubectl create deployment nginx --image=nginx

  2. 查看状态:watch -n 3 kubectl get pods -A
    在这里插入图片描述

  3. 本机访问

    1)查看默认生成的ClusterIP:kubectl get pod -o wide
    在这里插入图片描述
    2)访问:curl 192.169.189.110
    在这里插入图片描述

    3)查看路由:route -n
    在这里插入图片描述

    4)查看192.168.248.12服务器的路由
    在这里插入图片描述

    5)每个节点都会记录相应的CIN生成的IP,并且也会记录对应的源IP作为互联网关口。如上所见,我们在worker2(192.168.248.12)部署了pod,当我们访问189.*的时候,会跳转到worker2(192.168.248.12)网关。所以当我们访问 192.169.189.110时,实际上访问的是192.168.248.12上的nginx。

  4. 创建供外部访问的ip和端口(NodePort):kubectl expose deployment nginx --port=80 --type=NodePort

    ps:在最新的 Kubernetes 版本中,kubectl expose 不再支持 --node-port 参数来指定 NodePort 端口。如果需要指定端口,则需要编写yaml文件生成。

  5. 查看端口:kubectl get pods,svc
    在这里插入图片描述

  6. 访问nginx页面:http://192.168.248.11:30579
    在这里插入图片描述

四、pod之间的访问示例

  1. pod之间的网络访问推荐通过service name进行访问

  2. 创建busybox的pod并且进入: kubectl run -it --image busybox:1.28.4 dns-test --restart=Never --rm /bin/sh

    ps:busybox是一个聚成了一百多个最常用linux命令和工具的软件工具箱,它在单一的可执行文件中提供了精简的Unix工具集,便于测试。

  3. 访问nginx:wget http://nginx
    在这里插入图片描述

  4. 跨空间访问其他的service(加上".空间名"): wget http://nginx.default

五、service反向代理示例

  1. 反向代理外部ip:创建service并且自定义endpoints

    1)编写service.yaml:vi /opt/edsvc.yaml

    ps:不指定空间的默认default空间

    apiVersion: v1
    kind: Service 
    metadata:
      name: nginx-svc-external 
      labels:
        app: nginx
    spec:
      ports: 
      - port: 80 
        targetPort: 80
        name: web 
      type: ClusterIP  
    

    解释

    apiVersion: v1
    kind: Service #资源类型为Service
    metadata:
      name: nginx-svc-external # Service 名字
      labels:
        app: nginx # Service 自己本身的标签
    spec:
      ports: #端口映射
      - port: 80 #service自己的端口,在使用内网ip访间时使用
        targetPort: 80 #目标pod的端口
        name: nginx-web #为端口起个名字
      type: ClusterIP  #主随机启动一个瑞口(3080-32767》,映射到ports 中的踏口,该端口是直接掷定在node 上的,且集群中的每一个node都会绑定这个端口
                      #也可以用于将服务暴露给外部访问,但是这种方式实际生产环境不推荐,效率较低,而且 Service 是四层负载
    

    2)编写endpoints.yaml:vi /opt/endpoints.yaml

    apiVersion: v1
    kind: Endpoints
    metadata:
      labels:
        app: nginx 
      name: nginx-svc-external 
      namespace: default 
    subsets:
    - addresses:
      - ip: 120.78.159.117 
      ports:  
      - name: nginx-web
        port: 80
        protocol: TCP
    

    解释

    apiVersion: v1
    kind: Endpoints
    metadata:
      labels:
        app: nginx # 与service一致
      name: nginx-svc-external #与service一致
      namespace: default #与service一致
    subsets:
    - addresses:
      - ip: 120.78.159.117 #目标ip 地址
      ports: #与service一致
      - name: web
        port: 80
        protocol: TCP
    

    3)创建资源

    kubectl apply -f  /opt/edsvc.yaml
    kubectl apply -f  /opt/endpoints.yaml
    

    4)查看代理地址:kubectl get ep
    在这里插入图片描述

    4)测试访问:kubectl run -it --image busybox:1.28.4 dns-test --restart=Never --rm /bin/sh --> wget http://nginx-svc-external

    ps:可以看到,路径转发到外网ip去了
    在这里插入图片描述

  2. 反向代理外部域名

    1)创建资源:vi /opt/baidusvc.yaml

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: wolfcode-external-domain
      name: wolfcode-external-domain
    spec:
      type: ExternalName 
      externalName: www.wolfcode.cn
    

    2)创建资源:kubectl apply -f /opt/baidusvc.yaml

    3)查看svc:kubectl get svc
    在这里插入图片描述

    4)测试访问:kubectl run -it --image busybox:1.28.4 dns-test --restart=Never --rm /bin/sh --> wget wolfcode-external-domain
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1099136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++继承重要知识点总结(上)

目录 一.前言 二.继承机制 三.父子类赋值兼容规则 四.继承中的作用域 五.子类的默认成员函数 1.构造函数 2.拷贝构造函数 3.赋值重载函数 4.析构函数 一.前言 继承作为C的三大特性之一,其重要性不言而喻,只有学好了继承才能为后面的多态打下基础…

数据结构-----红黑树的插入

目录 前言 红黑树的储存结构 一、节点旋转操作 左旋(Left Rotation) 右旋(Right Rotation) 二、插入节点 1.插入的是空树 2.插入节点的key重新重复 3.插入节点的父节点是黑色 4.插入节点的父节点是红色 4.1父节点是祖父…

“之江创客”亚洲赛区完美收官 助力浙亚经贸高质量发展

10月13日下午,由商务部中国国际电子商务中心指导,浙江省商务厅等十个部门主办,浙江省电子商务促进中心承办的“之江创客”2023全球电子商务创业创新大赛亚洲赛区决赛成功举办。浙江省商务厅党组成员、副厅长张钱江出席活动并致辞,…

DDoS攻击与CC攻击:网络安全的两大挑战

在今天的数字时代,网络安全问题越来越突出,其中分布式拒绝服务攻击(DDoS攻击)和HTTP洪泛攻击(CC攻击)是两种常见的网络威胁。本文将探讨这两种攻击的概念、原理以及如何有效地应对它们。 1. DDoS攻击&…

Python的logging模块(日志、DEBUG、INFO、WARNING、ERROR、CRITICAL)

1. 前言 logging 是 Python 标准库中用于记录日志的模块。它提供了一种灵活且可配置的方式来在应用程序中记录各种信息,包括调试信息、警告和错误消息。无论是写框架代码还是业务代码,都离不开日志的记录,它能给我们定位问题带来极大的帮助。…

哈夫曼树的建立(C++,最优树)

介绍: 哈夫曼树(Huffman Tree)是一种用于数据压缩的树形数据结构。它是由刚特哈夫曼于1952年发明的。 哈夫曼树的特点是:对于一个长度为n的字符集,它可以将每个字符在树上表示为一个唯一的二进制编码。在哈夫曼树中&am…

C语言——编译全过程的那些事

C语言——编译全过程的那些事 一、C语言的编译过程二、编译的详细过程2.1预编译过程2.2编译过程2.3 汇编过程2.4链接过程 三、编译全过程 一、C语言的编译过程 1.C语言的编译过程通常可以分为两个大的部分,编译和链接。 2.在ANSI C的任何一种实现中,存…

Vue检测数据的原理

Vue能够对用户的数据进行响应式,也就是你在data中写了什么,你在模板中用到data的部分就会渲染成什么,那么Vue是怎么知道用户修改了data中的数据变化并对模板重新进行解析的呢? 在Vue将数据存储为自身的_data之前,Vue会…

《中国工业经济》企业数字化转型与供应链配置—集中化还是多元化

文章利用2010-2021年A股上市公司数据,从供应链治理角度系统验证了企业数字化转型对供应链配置的影响及其作用机制 研究发现,企业数字化转型显著降低了供应链上游供应商、下游客户以及供应链整体集中度,推动供应链配置多元化;该推…

python使用dataset快速使用SQLite

目录 一、官网地址 二、安装 三、 快速使用 一、官网地址 GitHub - pudo/dataset: Easy-to-use data handling for SQL data stores with support for implicit table creation, bulk loading, and transactions. 二、安装 pip install dataset 如果是mysql,则…

基于冠状病毒群体免疫优化的BP神经网络(分类应用) - 附代码

基于冠状病毒群体免疫优化的BP神经网络(分类应用) - 附代码 文章目录 基于冠状病毒群体免疫优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.冠状病毒群体免疫优化BP神经网络3.1 BP神经网络参数设置3.2 冠…

7.memchr函数

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h>int main() {int* ans NULL;char arr[] "abcdef";int len 3;/*共查找len个字节*/char ch d;ans memchr(arr, ch, len);if (NULL ans){printf("前%d个字符中&#xff0c…

数据结构与算法课后题-第六章(图的基本概念)

文章目录 1 图的基本概念2 基本概念及术语1 有向图2 无向图3 简单图、多重图4 完全图5 子图6 连通 、连通图和连通分量7 强连通图、强连通分量8 生成树、生成森林 参考博客&#xff1a; 数据结构&#xff1a;图(Graph)【详解】 1 图的基本概念 2 基本概念及术语 1 有向图 2 无…

深度分析c+引用的本质以及引用与指针的区别

文章目录 引用的概念引用的定义引用的特性引用的权限问题引用的使用方式引用作参数引用作返回值指针的本质引用和指针的区别 引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用…

Oracle数据库SQL*Plus命令行执行SQL语句时,中文乱码报错解决方法

文章目录 问题背景解决方案1. 设置NLS_LANG环境变量2. 修改SQL*Plus字符集设置3. 使用Unicode字符集 常见错误和解决方法结语 &#x1f389;欢迎来到Java学习路线专栏~Oracle数据库SQL*Plus命令行执行SQL语句时&#xff0c;中文乱码报错解决方法 ☆* o(≧▽≦)o *☆嗨~我是IT陈…

【jmeter】接口测试流程

1、Jmeter简介 Jmeter是由Apache公司开发的一个纯Java的开源项目&#xff0c;即可以用于做接口测试也可以用于做性能测试。 Jmeter具备高移植性&#xff0c;可以实现跨平台运行。 Jmeter可以实现分布式负载。 Jmeter采用多线程&#xff0c;允许通过多个线程并发取样或通过独…

NTFS磁盘格式读写工具Tuxera NTFS 2023 for Mac中文破解版v2023含最新激活序列号

Tuxera NTFS 2023 Mac 是一个NTFS文件系统驱动程序&#xff0c;为解决Mac上不能对NTFS格式硬盘进行访问和读写而生。实现苹果Mac OS X系统读写Microsoft Windows NTFS文件系统&#xff0c;在硬盘、U盘等外接设备中进行全面访问、删除、修改等相关操作。 tuxera ntfs 2023 破解…

计算机网络第2章-CDN(4)

视频流和内容分发网 HTTP流和DASH 在HTTP流中&#xff0c;视频只是存储在HTTP服务器中作为一个普通的文件&#xff0c;每个文件有有一个特定的URL。当用户要看视频时&#xff0c;客户与服务器之间创建一个TCP连接并发送HTTP GET请求。 HTTP流具有严重缺陷&#xff0c;即所有…

扩大减产,NAND Flash市场迎来涨价潮 | 百能云芯

根据TrendForce的最新研究&#xff0c;NAND Flash市场即将面临一轮全面涨价的浪潮。供应商们通过严格控制产出量&#xff0c;将在第四季实施合约价的涨幅&#xff0c;预计在8%到13%之间。明年除非原厂仍能维持减产策略&#xff0c;且需留意服务器领域对Enterprise SSD需求是否回…

【Qt高阶】linux下编译提示找不到依赖的库【2023.10.16】

现象 提示找不到一些库文件。 排查方法 查看qmake出来的 makefile文件&#xff0c;相对路径是按照makefile文件所在路径进行查找。 命令行编译正常&#xff0c;拿QtCreator编译不过 把下面的勾去掉&#xff0c;直接在当前目录构建。