一、几种网络端口模式 Openshift/Docker中,我们会遇到(听到)的几种网络端口模式有: Hostport Nodeport Hostnetwork router 它们有什么区别,适用于什么场景?我们先看看它们的作用。 二、什么是hostport? hostport它指的是:在一个宿主机上运行的一个容器,为了外部能够访问这个容器,将容器的端口与宿主机进行端口映射。而为了避免宿主机上的端口占用,在容器和宿主机做端口映射的时候,通常映射一个比较大的端口号(小端口被系统服务占用)。 我们看一个实验:
如你所知,已经有很多关于服务网格的资料,但这是另外一篇。是的!但是为什么会有这篇文章呢?因为我想给你们一些不同的视角,他们希望服务网格在10年前就已经存在,远早于Docker和Kubernetes这样的容器平台的兴起。我并不是说这个视角比其他视角更好或更差,但是由于服务网格是相当复杂的“野兽”,所以我相信多种视角有助于更好地理解它们。
Istio 可以管理集群的出入口流量,当客户端访问集群内的应用时, Istio 可以将经过 istio-ingressgateway 的流量实现负载均衡和熔断等一系列功能。
我印象中负载均衡其实是个硬件设备。其实一开始确实是的,然而现在已经不同了。尤其是云厂商提供的负载均衡方案几乎全部是靠软件。现在的负载均衡不仅是网络流量复杂均衡,几乎所有的平衡多个计算资源负载的方案都可以叫做负载均衡。在云计算背景下,负载均衡其实有一个软件实体--proxy。准确说,他们其实是不一样的,但是不能否认他们的功能其实重叠,proxy将网络转发作为主要功能。并且在所有的service mesh、cloud的资料中,这两个词指的就是同一个东西。
Kubernetes 作为基础平台,提供了强大的容器编排能力。但是在其上部署业务和服务治理上,仍然会面对一些复杂性和局限性。在服务治理上,已经有许多成熟的 ServiceMesh 框架用于扩充其能力,如 Istio、Linkerd、Dapr 等。本文将主要介绍如何使用 Istio 扩充 Kubernetes 灰度发布的能力。
在第1章中我们提到有三种 I P地址:单播地址、广播地址和多播地址。本章将更详细地介绍广播和多播。
在 Istio 项目的 istioctl 目录中,有一些子目录,每个目录都有不同的作用和功能。以下是这些子目录的详细介绍:
一个VLAN是局域网 (LAN) 上运行在同一 IP 地址空间中的主机的逻辑子集。将主机分组到一个 VLAN 中具有明显的优势。例如,使用 VLAN,您可以:
使用U D P的一些蕴含对于设计和实现服务器会产生影响。通常,客户端的设计和实现比服务器端的要容易一些,这就是我们为什么要讨论服务器的设计,而不是讨论客户端的设计的原因。典型的服务器与操作系统进行交互作用,而且大多数需要同时处理多个客户。
链路层:有时也被称为数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡,一起处理与电缆(或者其他任何传输媒介)的物理接口细节。
这个示例部署了一个用于演示多种 Istio 特性的应用,该应用由四个单独的微服务构成。
初始的 Kubernetes 内部服务向外暴露,使用的是自身的 LoadBlancer 和 NodePort 类型的Service,在集群规模逐渐扩大的时候,这种 Service 管理的方式满足不了我们的需求,比如 NodePort 需要大量的端口难以维护,多了一层NAT,请求量大会对性能有影响;LoadBlancer 需要每个 Service 都有一个外部负载均衡器。接着 Kubernetes 提供了一个内置的资源对象 Ingress API 来暴露 HTTP 服务给外部用户,它的创建是为了标准化的将 Kubernetes 中的服务流量暴露给外部,Ingress API 通过引入路由功能,克服了默认服务类型 NodePort 和 LoadBalancer 的限制。在创建 Ingress 资源的时候通过 IngressClass 指定该网关使用的控制器,主要是靠 Ingress 控制器不断监听 Kubernetes API Server 中 IngressClass 以及 Ingress 资源的的变动,配置或更新入口网关和路由规则。IngressClass实现了网关与后台的解耦,但也有着很多的局限性。Ingress 配置过于简单,只支持 http 和 https 协议的服务路由和负载均衡,缺乏对其他协议和定制化需求的支持,而且 http 路由只支持 host 和 path 的匹配,对于高级路由只能通过注解来实现,当然这取决于 Ingress 控制器的实现方式,不同的 Ingress 控制器使用不同的注解,来扩展功能,使用注解对于 Ingress 的可用性大打折扣;路由无法共享一个命名空间的网关,不够灵活;网关的创建和管理的权限没有划分界限,开发需要配置路由以及网关。当然也有很多第三方的网关组件,例如 istio 和 apisix 等,提供了丰富的流量管理功能,如负载均衡、动态路由、动态 upstream、A/B测试、金丝雀发布、限速、熔断、防御恶意攻击、认证、监控指标、服务可观测性、服务治理等,还可以处理南北流量以及服务之间的东西向流量。对外提供路由功能,对内提供流量筛选,已经很好的满足了当下网络环境的所有需求。但对于小集群来说,这两个网关的部署成本有点高;而且太多类型的网关,不同的配置项、独立的开发接口、接口的兼容性、学习成本、使用成本、维护成本以及迁移成本都很高。急需一种兼容所有厂商 API 的接口网关。所以应运而生,Kubernetes 推出了 Gateway API。Gateway API 是 Kubernetes 1.19 版本引入的一种新的 API 规范,会成为 Ingress 的下一代替代方案。它有着 Ingress 的所有功能,且提供更丰富的功能,它支持更多的路由类型选择,除了 http路由外,还支持 tcp 以及 grpc 路由类型;它通过角色划分将各层规则配置关注点分离,实现规则配置上的解耦;并提供跨 namespace 的路由与网关支持使其更适应多云环境等。与 Ingress Api 工作类似的,Gateway Controller 会持续监视 Kubernetes API Server 中的 GatewayClass 和 Gateway 对象的变动,根据集群运维的配置来创建或更新其对应的网关和路由。API 网关、入口控制器和服务网格的核心都是一种代理,目的在于内外部服务通信。更多的功能并不等于更好的工具,尤其是在 Kubernetes 中,工具的复杂性可能是一个杀手。
在Istio网关Gateway中,默认使用的负载均衡算法是ROUND_ROBIN。除此之外,Istio还支持其他的负载均衡算法,包括LEAST_CONN、RANDOM和PASSTHROUGH等。
OpenShift的OVS网络组件有三种模式:ovs-subnet、ovs-multitenant、ovs-networkpolicy。
网络地址转换(Network Address Translation,NAT)是一种在计算机网络中广泛使用的技术,它允许将一个网络地址映射到另一个网络地址。静态NAT、动态NAT和端口地址转换(Port Address Translation,PAT)是NAT的常见实现方式。
Nginx不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。正向代理:如果把局域网外的Intenet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
gRPC 是长连接服务,而长连接服务负载不均是通病,因为使用四层负载均衡的话,只能在连接调度层面负载均衡,但不能在请求级别负载均衡。不同连接上的请求数量、网络流量、请求耗时、存活时长等可能都不一样,就容易造成不同 Pod 的负载不一样。而 istio 天然支持 gRPC 负载均衡,即在七层进行负载均衡,可以将不同请求转发到不同后端,从而避免负载不均问题,腾讯云容器服务也对 istio 进行了产品化托管,产品叫 TCM,本文介绍如何使用 TCM 来暴露 gRPC 服务。
本文讨论传输层的多路复用与多路分解,也就是将网络层所提供的主机到主机交付服务扩展到为在主机上运行的应用程序所提供的进程到进程交付服务。
01 NAT的作用 TITTLES (1)在一定程度上缓解 IP 地址空间枯竭的压力 (2)有效避免来自外网的攻击,可以很大程度上提高网络安全性(屏蔽私网 ip) (3)控制内网主机访问外网,同时也可以控制外网主机访问内网,解决了内网 和外网不能互通的问题 02 NAT工作原理 TITTLES (1)Basic NAT 方式属于一对一的地址转换,在这种方式下只转换 IP 地址,而不处理 TCP/UDP 协议的端口号,一个公网 IP 地址不能同时被多个私网用户使用
上一篇聊了UDP相关的知识点,包含UDP有什么特点、为什么需要进行IP分片、TCP与UDP有何区别等。
MongoDB 是一个高性能、可扩展的 NoSQL 数据库,常用于存储非结构化数据。随着数据量的增加,单个 MongoDB 实例的性能和可用性可能会受到限制。为了解决这个问题,可以使用 MongoDB 集群来实现数据的分布和复制。
通过学习 TCP/IP 基础, 并总结相关笔记 和 绘制思维导图 到博客上, 对 TCP/IP 框架有了大致了解, 之后开始详细学习数据链路层的各种细节协议, 并作出笔记;
每一台计算机之间都是相互独立的,无法进行通信。每台计算机都负责处理某个业务。如下图所示
③ 数据链路层 : 数据链路层设备 , 如 : 网桥 , 交换机 , 最高只到 数据链路层 ;
OS X 和 iOS 为 Bonjour 服务应用程序提供了多层应用程序编程接口 (API): Foundation 框架中的 NSNetService 和 NSNetServiceBrowser 类; CFNetServices,Core Services 中 CFNetwork 框架的一部分; Java 的 DNS 服务发现(仅限 OS X);以及围绕 BSD 套接字构建的低级 DNS 服务发现 API。所有三个 API 集都为网络服务的发布、发现和解析提供便利。图 3-1 说明了 API 层的结构。如您所见,多播 DNS 响应程序(或其他 DNS 服务器)位于最低级别,因此您的软件不必直接与 DNS 交互。
0–1023:http,ssh,ftp,telnet等一些协议端口号都是固定的,对于操作系统来说是不能对其进行分配的
0--1023:http,ssh,ftp,telnet等一些协议端口号都是固定的,对于操作系统来说是不能对其进行分配的
NAT虽然带来了不少的好处,但是也增加了端对端直接通信的难度,NAT使得端对端的通信方式在某些场景下只能通过中转服务器进行交互。
RARP分组的格式与ARP分组基本一致,它们之间的主要差别是RARP请求或应答的帧类型为0x8035,RARP请求的操作码为3,应答操作码为4。
在Docker中,构建一个自定义镜像共有两种方法,一是通过commit指令构建,二是通过Dockerfile文件构建。第一种方式在上篇博客中已经详细介绍(Docker入门实战(二)——Docker镜像操作),接下来介绍在Docker中更为常用的方法——使用Dockerfile构建镜像。 用Dockerfile构建镜像的基本流程 先来回顾下commit方式创建镜像的流程: 1. 首先需要有一个基础镜像(可以把基础镜像理解为操作系统) 2. 然后基于该镜像创建容器 3. 在容器中配置运行环境 4
文件传输协议FTP(File Transfer Protocol)是因特网中使用最广泛的文件传输协议。FTP使用交互式的访问,允许客户指定文件的类型和格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。
随着Internet的发展和网络应用的增多,IPv4地址枯竭已经成为制约网络发展的瓶颈。尽管IPv6可以从根本上解决IPv4地址空间不足的问题,但目前众多的网络设备和网络应用仍是基于IPv4的,因此在IPv6广泛应用之前,一些过渡技术的使用是解决这个问题的主要技术手段。
从IP层来说,通信的两端是两个主机。IP数据报的首部明确地标志了这两个主机的IP地址。我们需要知道,真正进行通信的实体是在主机中的进程,是这个主机中的一个进程和另一个主机中的进程在交换数据(即通信)。因此严格地讲,两个主机进行通信就是两个主机中的应用进程进行通信。IP协议虽然等把分组送到目的主机,但是这个分组还停留在主机的网络层而没有交付主机中的应用进程。从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。也就是说,端到端的通信是应用进程之间的通信。
T C P / I P起源于6 0年代末美国政府资助的一个分组交换网络研究项目,到 9 0年代已发展成为计算机之间最常应用的组网形式。它是一真正的开放系统,因为协议族的定义及其多种实现可以不用花钱或花很少的钱就可以公开地得到。它成为被称作“全球互联网”或“因特网 ( I n t e r n e t )”的基础,该广域网(WA N)已包含超过1 0 0万台遍布世界各地的计算机。
前面说过,传输层的作用是建立应用程序间的端到端连接,为数据传输提供可靠或不可靠的通信服务。传输层有两个重要协议,分别是 TCP 和 UDP。TCP 是面向连接的可靠传输协议,UDP 是无连接的不可靠传输协议。
1、基本配置基本配置(接口 IP 地址、设备主机名等)【这里就不演示了,兄弟们可以自行设置】
端口号可以区分一个主机上的多个进程,在一次通信中有五元组源IP,源端口,目的IP,目的端口,协议号来标识一次通信。
Java 网络编程 基于套接字的通信可以使程序通过指定的套接字进行通信。套接字是两个主机之间逻辑链接的端点,可以用于发送和接收数据,Java对套接字的处理非常类似于对输入输出操作的处理,因此,程序从socket中读写就像从文件中读写一样容易 Java支持流套接字和数据报套接字:流套接字使用传输控制协议TCP进行数据传输,而数据报套接字使用的是用户数据报协议UDP进行数据传输 1、客户/服务器计算模式 网络程序设计通常涉及一个服务器和一个或多个客户,客户向服务器发送请求,服务器响应请求。服务器创建一个服务器套
一个协议族比如TCP/IP,通常是一组不同层次上多个协议的组合。一般可以认为是是四层协议系统:
由于现在许多项目和工程都在云服务器上部署,对于程序员来说,日常工作中常常会有登陆远程服务器的需求,所以使用SSH就成了一项必备的技能。
server 块中完成虚拟主机的设置,listen 命令监昕端口。 因此,若要在 Nginx 中配置一个虚拟主机,只需在 http 块中添加一个 server 块即可 。 换句话说, http 块中的每个 server 块都是一个虚拟主机。
Stevens 99年因病去世(享年48岁,1951年生),身后给我们留下了七本书,按时间逆序是:
端口号标识的是一个主机上进行通信的不同的应用程序,通过IP+PORT,便能够确认全网唯一一个进程。
OSI 代表 开放系统互连。它由ISO(“国际标准化组织”)于1984年开发。它是一个 7 层架构,每一层都有特定的功能要执行。所有这 7 层协同工作,在全球范围内将数据从一个人传输到另一个人。
可以使用--master标志在主模式下启动Locust的一个实例。这个实例将运行Locust的web接口,您可以在这里启动测试并实时查看统计信息。主节点本身不模拟任何用户。相反,您必须使用--slave标志启动一个或多个从Locust节点,与--master-host(指定主节点的IP /主机名)一起使用。
URL(Uniform Resoure Locator)中文译为统一资源定位符,是 Internet 上资源的地址,比如一个文本文件,一张图片,一个视频。通过 URL 我们可以知道网络资源的位置以及访问它的协议。
有很多平时喜欢钻研的童鞋会发现,为什么有时候自己访问某XXse网站时,总是更新IP地址,内容却与以前一样。这个时候就要了解虚拟主机的概念了。了解这个概念,能够帮助运维同学,更内涵的隐藏自己的主机,或者让一台apache支持多个网站的共同运营。 参考资料: 1 http://httpd.apache.org/docs/2.2/ 2《Apache cookbook》 虚拟主机寻址方式 IP地址方式:每台虚拟主机都有其唯一的IP地址 名称寻址方式:多台虚拟主机会以不同的名称在同
传输层协议提供逻辑通信服务 传输层协议只需在端系统中实现 通信的真正断电并不是主机,而是主机中运行的应用进程
领取专属 10元无门槛券
手把手带您无忧上云