calico网络策略

什么是网络策略 在Kubernetes平台中,要实现零信任网络的安全架构,Calico与istio是在Kubernetes集群中构建零信任网络必不可少的组件。 而建立和维护整个集群中的“零信任网络”中,网络策略的功能在操作上大致可以总结为使用资源配置模板来管理控制平面数据流。说白了讲网络策略就是用来控制Pod间流量的规则。 在Calico中如何编写网络策略 要使用网络策略就需要先了解Calico功能**:NetworkPolicy和GlobalNetworkPolicy**。 NetworkPolicy资源,简称np;是命名空间级别资源。规则应用于与标签选择器匹配的endpoint的集合。 GlobalNetworkPolicy资源,简称 gnp/gnps与NetworkPolicy功能一样,是整个集群级别的资源。 GlobalNetworkPolicy 与 NetworkPolicy资源的管理也与calico的部署方式有关,使用etcd作为存储时,资源的管理只能使用 calicoctl进行管理 NetworkPolicy与GlobalNetworkPolicy的构成 yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 apiVersion: projectcalico.org/v3 kind: NetworkPolicy metadata: name: allow-tcp-90 spec: selector: app == 'envoy' # 应用此策略的endpoint types: # 应用策略的流量方向 - Ingress - Egress ingress: # 入口的流量规则 - action: Allow # 流量的行为 protocol: ICMP # 流量的协议 notProtocol: TCP # 匹配流量协议不为 值 的流量 source: # 流量的来源 src与dst的匹配关系为 与,所有的都生效即生效 nets: # 有效的来源IP selector: # 标签选择器 namespaceSelector: # 名称空间选择器 ports: # 端口 - 80 # 单独端口 - 6040:6050 # 端口范围 destination: # 流量的目标 egress: # 出口的流量规则 - action: Allow serviceAccountSelector: # 使用与此规则的serviceAccount NetworkPolicy使用 实例:允许6379流量可以被 role=frontend的pod访问...

Linux中169.254.0.0/24的路由来自哪里

在Linux中,发现每次系统启动时,都会将(169.254.0.0/16)路由启动并将其添加到路由表中。但是并不知道这条路由具有什么功能和它到底来自于哪里? text 1 2 3 4 5 6 $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 eth0 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 要想搞清楚路由(169.254.0.0/16)究竟来自哪里并且它的作用是什么?首先需要搞明白两个概念 zeroconf “zeroconf”或“Zero Configuration Networking” 是一种无需额外配置即可自动创建IP地址网络的技术。也被称为 “Automatic Private IP Addressing”(APIPA)。 zeroconf规范的提出者是Apple公司,其目的是让非专业用户也可以便捷的连接各种网络设备,例如计算机,打印机等。整个搭建网络的过程都是自动实现。如果没有“zeroconf”,用户必须手动,或者利用对应的服务(例如DHCP、DNS)对网络进行配置。这些过程对非技术用户和新用户们来说是很一件难的事情。 zeroconf的出现是问了解决三个问题: 为网络设备自动分配可用IP地址 解析计算机主机名 自动发现网络服务(如打印机等) zeroconf的地址选用 对于Link-local address,IPv4使用的特殊保留地址169.254.0.0/16,在RFC3927中所描述。作用是当DHCP客户端在超时和重试后扔找不到对应的DHCP服务器,它将随机从该网络(`169.254.0.0/16`)中获取地址。这样可以与无法获取DHCP地址的主机进行通信。 如何禁用zeroconf 要在系统引导期间禁用zeroconf路由,需要编辑/etc/sysconfig/network文件,配置以下内容 text 1 2 3 NETWORKING=YES HOSTNAME=localhost....

基于Kubernetes的PaaS平台提供dashboard支持的一种方案  [转载]

[转载] 我的小米粥分你一半 —— corvo...

动态路由- BGP

概述 BGP Border Gateway Protocol 边界网关协议,,是一种运行于TCP上的自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。 早期发布的三个版本分别是BGP-1、BGP-2和BGP-3,1994年开始使用BGP-4,2006年之后单播IPv4网络使用的版本是BGP-4,其他网络(如IPv6等)使用的版本是MP-BGP。 MP-BGP是对BGP-4进行了扩展,来达到在不同网络中应用的目的,BGP-4原有的消息机制和路由机制并没有改变。MP-BGP在IPv6单播网络上的应用称为BGP4+,在IPv4组播网络上的应用称为MBGP(Multicast BGP)。 历史 为方便管理规模不断扩大的网络,网络被分成了不同的自治系统。1982年,外部网关协议EGP(Exterior Gateway Protocol)被用于实现在AS之间动态交换路由信息。但是EGP设计得比较简单,只发布网络可达的路由信息,而不对路由信息进行优选,同时也没有考虑环路避免等问题,很快就无法满足网络管理的要求。 BGP是为取代最初的EGP而设计的另一种外部网关协议。不同于最初的EGP,BGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息。 虽然BGP用在AS之间传递路由信息,但并非所有AS之间传递路由信息都要运行BGP。如数据中心上行到Internet的出口上,为了避免Internet海量路由对数据中心内部网络影响,设备采用静态路由代替BGP与外部网络通信。 受益 BGP从多方面保证了网络的安全性、灵活性、稳定性、可靠性和高效性: BGP采用认证和GTSM的方式,保证了网络的安全性。 BGP提供了丰富的路由策略,能够灵活的进行路由选路,并且能指导邻居按策略发布路由。 BGP提供了路由聚合和路由衰减功能用于防止路由振荡,有效提高了网络的稳定性。 BGP使用TCP作为其传输层协议(端口号为179),并支持BGP与BFD联动、BGP Tracking和BGP GR和NSR,提高了网络的可靠性。 在邻居数目多、路由量大且大多邻居有相同出口策略场景下,BGP用按组打包技术极大提高了BGP打包发包性能。 BGP相关名词说明 名词 说明 BGP 边界网关协议(Border Gateway Protocol)是互联网上一个核心的去中心化自治路由协议,它通过维护IP路由表或前缀表来实现自治系统(AS)之间的可达性大多数ISP使用BGP来与其他ISP创建路由连接,特大型的私有IP网络也可以使用BGPBGP的通信对端(对等实体,Peer)通过TCP(端口179)会话交换数据,BGP路由器会周期地发送19字节的保活消息来维护连接。在路由协议中,只有BGP使用TCP作为传输层协议 IBGP 内部边界网关协议。同一个AS内部的两个或多个对等实体之间运行的BGP被称为IBGP IGP 内部网关协议。同一AS内部的对等实体(路由器)之间使用的协议,它存在可扩容性问题:1. 一个IGP内部应该仅有数十(最多小几百)个对等实体2. 对于端点数,也存在限制,一般在数百(最多上千)个Endpoint级别IBGP和IGP都是处理AS内部路由的,仍然需要IGP的原因是:1. IBGP之间是TCP连接,也就意味着IBGP邻居采用的是逻辑连接的方式,两个IBGP连接不一定存在实际的物理链路。所以需要有IGP来提供路由,以完成BGP路由的递归查找2. BGP协议本身实际上并不发现路由,BGP将路由发现的工作全部移交给了IGP协议,它本身着重于路由的控制 EBGP 外部边界网关协议。归属不同的AS的对等实体之间运行的BGP称为EBGP AS 自治系统(Autonomous system),一个组织(例如ISP)管辖下的所有IP网络和路由器的整体参与BGP路由的每个AS都被分配一个唯一的自治系统编号(ASN)。对BGP来说ASN是区别整个相互连接的网络中的各个网络的唯一标识。64512到65535之间的ASN编号保留给专用网络使用 RouteReflector 同一AS内如果有多个路由器参与BGP路由,则它们之间必须配置成全连通的网状结构——任意两个路由器之间都必须配置成对等实体。由于所需要TCP连接数是路由器数量的平方,这就导致了巨大的TCP连接数为了缓解这种问题,BGP支持两种方案:Route Reflector、Confederations路由反射器(Route Reflector)是AS内的一台路由器,其它所有路由器都和RR直接连接,作为RR的客户机。RR和客户机之间建立BGP连接,而客户机之间则不需要相互通信RR的工作步骤如下:1. 从非客户机IBGP对等实体学到的路由,发布给此RR的所有客户机2. 从客户机学到的路由,发布给此RR的所有非客户机和客户机3. 从EBGP对等实体学到的路由,发布给所有的非客户机和客户机RR的一个优势是配置方便,因为只需要在反射器上配置 工作负载 Workload,即运行在Calico节点上的虚机或容器 全互联 全互联网络(Full node-to-node Mesh)是指任何两个Calico节点都进行配对的L3连接模式 BGP 应用 国内IDC机房需要在 CNNIC (中国互联网信息中心)或 APNIC (亚太网络信息中心)申请自己的IP地址段和AS号,然后将自己的IP地址广播到其它网络运营商的AS中,并通过BGP协议将多个AS进行连接,从而实现可自动跨网访问。此时,当用户发出访问请求后,将根据BGP协议的机制自动在已建立连接的多个AS之间为用户提供最佳路由,从而实现不同网络运营商用户的高速访问同一机房资源。 BGP的运行 BGP使用TCP为传输层协议,TCP端口号179。路由器之间的BGP会话基于TCP连接而建立。运行BGP的路由器被称为BGP发言者(BGP Speaker),或BGP路由器。两个建立BGP会话的路由器互为对等体(或称通信对端/对等实体,peer)。BGP对等体之间交换BGP路由表。 BGP路由器只发送增量的BGP路由更新,或进行触发更新(不会周期性更新)。 BGP具有丰富的路径属性和强大的路由策略工具。...

ARP与ARP Proxy

什么是arp 地址解析协议,Address Resolution Protoco,使用ARP协议可实现通过IP地址获得对应主机的的物理地址(MAC) 在TCP/IP的网络环境下,每个互联网的主机都会被分配一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址。为了让报文在物理网路上传输,还补习要知道对方目的主机的物理地址才行。这样就存在把IP地址变换成物理地址的地址转换问题。 在以太网环境,为了正确地向目的主机传送报文,必须把目的主机的32为IP地址转换成为目的主机48位以太网地址(MAC),这个就需要在互联层有一个服务或功能将IP地址转换为相应的物理地址(MAC),这个服务就是ARP协议. 所谓的"地址解析",就是主机在发送帧之前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证主机间互相通信的顺利进行. ARP协议和DNS有相像之处。不同点是:DNS实在域名和IP之间解析,另外ARP协议不需要配置服务,而DNS要配置服务才行。 ARP缓存表 在每台安装有TCP/IP协议的设备都会有一个ARP缓存表(windows命令提示符里输入arp -a即可), 表里的IP地址与MAC地址是一一对应的。 bash 1 2 3 4 5 6 7 8 9 10 C:\Users\CM>arp -a 接口: 192.168.1.103 --- 0x3 Internet 地址 物理地址 类型 192.168.1.1 3c-46-d8-5d-53-87 动态 192.168.1.255 ff-ff-ff-ff-ff-ff 静态 224.0.0.22 01-00-5e-00-00-16 静态 224.0.0.251 01-00-5e-00-00-fb 静态 224.0.0.252 01-00-5e-00-00-fc 静态 239.11.20.1 01-00-5e-0b-14-01 静态 239.255.255.250 01-00-5e-7f-ff-fa 静态 arp常用命令 arp -a 查看所有记录 arp -d 清除arp表 arp -s $ip $mac 将绑定IP和MAC arp -n 不解析名称打印arp表 ARP缓存是把双刃剑 主机有了arp缓存表,可以加快arp的解析速度,减少局域网内广播风暴。...

长期总结 - Linux网络命令合集

工具命令集合 长期总结 - Linux日志查询命令 长期总结 - Linux网络命令合集 长期总结 - Linux性能分析命令 awk常用案例 bash shell常用示例 探索kubectl - 巧用jsonpath提取有用数据 探索kubectl - kubectl诊断命令集合 理解ldap - OpenLDAP客户端命令行使用 Overview 作为系统管理员或程序员,经常需要诊断分析和解决网络问题,而配置、监控与保护网络有助于发现问题并在事情范围扩大前得意解决,并且网络的性能与安全也是管理与诊断网络的重要部分。本文将总结常用与Linux网络管理的命令与使用示例,保持长期更新与更正。 IP iproute2 包含网络、路由、ARP缓存等的管理与配置的ip命令,用来取代传统的 ifconfig 与 route;ip 使用第二个参数,指定在对象执行的操作(例如,add delete show)。 ip 命令是配置网络接口的强大工具,任何 Linux 系统管理员都应该知道。它用于启动或关闭接口、分配和删除地址和路由、管理 ARP 缓存等等。 ip 常用的子命令有: link (l) 网络接口管理 address (a) IP地址管理 route (r) 路由表管理 neigh (n) arp表管理 各系统下的包名与安装 Ubuntu/Debian: iproute2 ;apt install iproute2 CentOS/Fedora: iproute2 ;yum install -y iproute2 Apline:iproute2 ;apk add iproute2 ip link ip link 用于管理和显示网络接口...

网络隧道技术

隧道技术概要 隧道技术(Tunneling)是网络基础设置在网络之间传递数据的方式,使用隧道技术传递可以是不同协议的数据包,隧道协议将这些其他协议的数据包重新封装在新的包头中发送。被封装的数据包在隧道的两个端点之间通过网络进行路由,被封装数据包在网络上传递时所经历的逻辑路径称为隧道。 简单来说,隧道技术是一类网络协议,是将一个数据包封装在另一个数据包中进行传输的技术;**使用隧道的原因是在不兼容的网络上传输数据,或在不安全网络上提供一个安全路径。**通过网络隧道技术,可以使隧道两端的网络组成一个更大的内部网络。(把不支持的协议数据包打包成支持的协议数据包之后进行传输)。 隧道协议 要创建隧道,隧道的客户机和服务器双方必须使用相同的隧道技术,隧道协议有二层隧道协议与三层隧道协议两类。 二层隧道协议对应OSI模型中数据链路层,使用 帧 作为数据交换单位,PPTP、L2TP、L2F都属于二层隧道协议。是将数据封装在点对点协议的帧中通过互联网络发送。 三层隧道协议对应OSI模型中网络层,使用 包 作为数据交换单位,GRE、IPSec 都属于三层隧道协议。都是数据包封装在附加的IP包头中通过IP网络传送。 在例如VxLAN,工作在传输层和网络层之间。具体来说,将运行在用户数据报协议 (UDP) 和网络数据报协议 (IP) 之间,以便在网络中建立安全的通信通道。 网络隧道技术应用 隧道在Linux 中应用 IP隧道是指一种可在两网络间进行通信的通道。在该通道里,会先封装其他网络协议的数据包,之后再传输信息。 Linux原生共支持5种IPIP隧道: ipip: 普通的IPIP隧道,就是在报文的基础上再封装成一个IPv4报文 gre: 通用路由封装(Generic Routing Encapsulation),定义了在任意一种网络层协议上封装其他任意一种网络层协议的机制,所以对于IPv4和IPv6都适用 sit: sit模式主要用于IPv4报文封装IPv6报文,即IPv6 over IPv4 isatap: 站内自动隧道寻址协议(Intra-Site Automatic Tunnel Addressing Protocol),类似于sit也是用于IPv6的隧道封装 vti: 即虚拟隧道接口(Virtual Tunnel Interface),是一种IPsec隧道技术 像IPVS/LVS中的 Virtual Server via IP Tunneling,就是使用了IPIP隧道 SSH隧道技术 SSH提供了一个重要功能,称为转发 forwarding 或者称为隧道传输tunneling,它可以通过加密频道将明文流量导入隧道中,在创建SSH隧道时, SSH客户端要设置并转交一个特定本地端口号到远程机器上;一旦SSH隧道创建,用户可以连到指定的本地端口号以访问网络服务。本地端口号不用与远地端口号一样。 SSH隧道主要使用场景一般为 规避防火墙、加密网络流量 规避防火墙,SSH隧道可以使一个被防火墙阻挡的协议可被包在另一个没被防火墙阻挡的协议里,这技巧可用来逃避防火墙政策。而这种操作符合“数据包封装在另一个数据包中进行传输的技术”,故称为SSH隧道技术。 SSH隧道类型 在ssh连接的基础上,指定 ssh client 或 ssh server 的某个端口作为源地址,所有发至该端口的数据包都会透过ssh连接被转发出去;至于转发的目标地址,目标地址既可以指定,也可以不指定,如果指定了目标地址,称为定向转发,如果不指定目标地址则称为动态转发: 定向转发 定向转发把数据包转发到指定的目标地址。目标地址不限定是ssh client 或 ssh server,既可以是二者之一,也可以是二者以外的其他机器。...

使用eNSP构建calico BGP网络

实验文件: [calico BGP.zip](https://cdn.jsdelivr.net/gh/cylonchau/blogs@img/img/calico BGP.zip) R1 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 system-view sysname R1 interface l0 ip address 1.1.1.1 32 interface g0/0/0 ip address 10.1.0.1 24 interface g0/0/1 ip address 10.3.0.1 24 bgp 100 router-id 1.1.1.1 peer 10.1.0.2 as-number 123 peer 10.3.0.2 as-number 456 dis this dis ip interface b R2 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 system-view sysname R2 interface l0 ip address 2....

深入理解Kubernetes Pod网络原理 - Linux虚拟网络技术

本文是关于深入理解Kubernetes网络原理系列第2章 深入理解Kubernetes Pod网络原理 - 网络名称空间 深入理解Kubernetes Pod网络原理 - Linux虚拟网络技术 深入理解Kubernetes Pod网络原理 - CNI 深入理解Kubernetes Pod网络原理 - 跟随 flannel 学习CNI原理 深入理解Kubernetes Pod网络原理 - 跟随 flannel + multus 剖析 Chained Plugins 深入理解Kubernetes Pod网络原理 - 从零实现一个 CNI Plugin part 1 (Shell) 深入理解Kubernetes Pod网络原理 - 从零实现一个 CNI Plugin part 2 (libcni) 深入理解Kubernetes Pod网络原理 - Kubernetes网络模型 1 深入理解Kubernetes Pod网络原理 - Kubernetes网络模型 2 深入理解Kubernetes Pod网络原理 - Pod网络排错思路 Overview 本文将介绍Kubernetes中使用的相关虚拟网络功能,目的是为了任何无相关网络背景经历的人都可以了解这些技术在kubernetes中式如何应用的。 VLAN VLAN (Virtual local area networks)是逻辑上的LAN而不受限于同一物理网络交换机上。同样的VLAN也可以将同一台交换机/网桥下的设备/划分为不同的子网。...

静态路由

在因特网中,网络连接设备用来控制网络流量和保证网络数据传输质量。常见的网络连接设备有集线器(Hub)、网桥(Bridge)、交换机(Switch)和路由器(Router)。 路由器是一种典型的网络连接设备,用来进行路由选择和报文转发。路由器根据收到报文的目的地址选择一条合适的路径(包含一个或多个路由器的网络),然后将报文传送到下一个路由器,路径终端的路由器负责将报文送交目的主机。 路由(routing)就是报文从源地址传输到目的地址的活动。路由发生在OSI网络参考模型中的第三层即网络层。当报文从路由器到目的网段有多条路由可达时,路由器可以根据路由表中最佳路由进行转发。最佳路由的选取与发现此路由的路由协议的优先级、路由的度量有关。当多条路由的协议优先级。 路由是数据通信网络中最基本的要素。路由信息就是指导报文发送的路径信息,路由的过程就是报文转发的过程。 根据路由目的地的不同,路由可划分为: 网段路由:目的地为网段,IPv4地址子网掩码长度小于32位或IPv6地址前缀长度小于128位。 主机路由:目的地为主机,IPv4地址子网掩码长度为32位或IPv6地址前缀长度为128位。 根据目的地与该路由器是否直接相连,路由又可划分为: 直连路由:目的地所在网络与路由器直接相连。 间接路由:目的地所在网络与路由器非直接相连。 根据目的地址类型的不同,路由还可以分为: 单播路由:表示将报文转发的目的地址是一个单播地址。 组播路由:表示将报文转发的目的地址是一个组播地址。 路由的优先级 对于相同的目的地,不同的路由协议(包括静态路由)可能会发现不同的路由,但这些路由并不都是最优的。事实上,在某一时刻,到某一目的地的当前路由仅能由唯一的路由协议来决定。为了判断最优路由,各路由协议(包括静态路由)都被赋予了一个优先级,当存在多个路由信息源时,具有较高优先级(取值较小)的路由协议发现的路由将成为最优路由,并将最优路由放入本地路由表中。 路由协议 优先级 DIRECT 0 OSPF 10 IS-IS IS-IS Level1 15 IS-IS Level 2 由网关加入的路由 50 路由器发现的路由 55 静态路由 60 UNR(User Network Route) DHCP(Dynamic Host Configuration Protocol):60AAA-Download:60IP Pool:61Frame:62Host:63NAT(Network Address Translation):64IPSec(IP Security):65NHRP(Next Hop Resolution Protocol):65PPPoE(Point-to-Point Protocol over Ethernet):65 Berkeley RIP 100 点对点接口聚集的路由 110 OSPF的扩展路由 140 OSPF ASE 150 OSPF NSSA 150 BGP 170 EGP 200 IBGP 255 EBGP 255 其中,0表示直接连接的路由,255表示任何来自不可信源端的路由;数值越小表明优先级越高。 除直连路由(DIRECT)外,各种路由协议的优先级都可由用户手工进行配置。另外,每条静态路由的优先级都可以不相同。 路由器根据路由转发数据包,路由可通过手动配置和使用动态路由算法计算产生,其中手动配置的路由就是静态路由。...

calico network cni网络方案

Calico针对容器、虚拟机的开源网络和网络安全解决方案。是纯三层的数据中心网络方案。 Calico在每一个计算节点利用Linux Kernel实现了一个高效的虚拟路由器vRouter来负责数据转发,而每个vRouter通过BGP协议负责把自己上运行的workload的路由信息向整个Calico网络内传播。(小规模部署可以直接互联 BGP full mesh,大规模下可通过指定的BGP route reflector来完成)。 这样保证最终所有的workload之间的数据流量都是通过IP路由的方式完成互联的。Calico节点组网可以直接利用数据中心的网络结构(无论是L2或者L3),不需要额外的NAT,隧道或者Overlay Network。 Calico还基于iptables还提供了丰富而灵活的网络Policy,保证通过各个节点上的ACLs来提供Workload的多租户隔离、安全组以及其他可达性限制等功能。 calico组件 在Kubernetes平台之上calico/node容器会通过DaemonSet部署到每个节点,并运行三个守护程序: Felix:用于管理路由规则,负责状态上报。 BIRD:BGP的客户端,用于将Felix的路由信息加载到内核中,同时负责路由信息在集群中的分发。 confd:用于监视Calico存储(etcd)中的配置变更并更新BIRD的配置文件。 calicoctl使用问题 text 1 Failed to create Calico API client: invalid configuration: no configuration has been provided 默认情况下,calicoctl 将使用位于的默认KUBECONFIG从 Kubernetes APIServer 读取$(HOME)/.kube/config 。 如果默认的 KUBECONFIG 不存在,或者想从指定的存储访问信息,则需要单独配置。 bash 1 2 3 export DATASTORE_TYPE=kubernetes export DATASTORE_TYPE=etcdv3 export KUBECONFIG=~/.kube/config reference for calico 安装配置 开始前准备 确定calico数据存储 Calico同时支持kubernetes api和etcd数据存储。官方给出的建议是在本地部署中使用K8S API,仅支持Kubernetes模式。而官方给出的etcd则是混合部署(Calico作为Kubernetes和OpenStack的网络插件运行)的最佳数据存储。 使用kubernetes api作为数据存储的安装 text 1 2 curl https://docs.projectcalico.org/manifests/calico.yaml -O kubectl apply -f calico....

istio sidecar流量处理机制及配置

sidecar 介绍 在istio的流量管理等功能,都需要通过下发的配置应用到应用运行环境执行后生效,负责执行配置规则的组件在service mesh中承载应用代理的实体被称为side-car Istio对流量策略管理等功能无须对应用程序做变动, 这种对应用服务完全非侵入的方式完全依赖于Side-car,应用的流量有Sidecar拦截并进行认证、鉴权、策略执行等治理功能。在Kubernetes平台中,Side-car容器于应用容器在同一个Pod中并共享网络名词控件,因此Side-car容易可以通过iptables规则拦截进出流量进行管理。 sidecar的注入 sidecar是service mesh无侵入式架构的应用模式,在使用sidecar部署服务网格时,无需再每个应用节点运行服务代理,但是需要在每个应用程序中部署一个sidecar容器,来接管所有进出流量。 Sidecar会将额外容器注入到 Pod 模板中。Istio中的数据平面组件所需的容器有: istio-init 用于设置容器的iptables规则,目的是为了接管进出流量。在应用容器前启动并运行完成其生命周期,多个init容器按顺序依次完成。 istio-proxy 基于envoy的sidecar的代理。 sidecar被注入的方式 手动注入,使用 istioctl 修改容器模板并添加前面提到的两个容器的配置。不论是手动注入还是自动注入,Istio 都从 istio-sidecar-injector 和的 istio 两个 Configmap 对象中获取配置。 refer-istio-sidecar-injector 自动注入,在部署应用是,istio自动将sidecar注入到pod。这是istio推荐的方法,Istio在基于Kubernetes平台之上,需要在部署应用之前,对要标记部署应用程序的名称空间标记 kubectl label namespace default istio-injection=enabled 这个操作是对名称空间级别生效的。而后所部署的Pod中会注入sidecar执行上面sidecar容器的操作。 istio injector 注入原理 Sidecar Injector是Istio中实现自动注入Sidecar的组件,它是以Kubernetes准入控制器 AdmissionController 的形式运行的。Admission Controller 的基本工作原理是拦截Kube-apiserver的请求,在对象持久化之前、认证鉴权之后进行拦截。 Admission Controller有两种:一种是内置的,另一种是用户自定义的。 Kubernetes允许用户以Webhook的方式自定义准入控制器,Sidecar Injector就是这样一种特殊的MutatingAdmissionWebhook。 Sidecar Injector只在创建Pod时进行Sidecar容器注入,在Pod的创建请求到达 Kube-apiserver 后,首先进行认证鉴权,然后在准入控制阶段,Kube-apiserver以REST的方式同步调用Sidecar Injector Webhook服务进行init与istio-proxy容器的注入,最后将Pod对象持久化存储到etcd中。 sidecar容器 sidecar容器内部运行着 pilot-agent 与 envoy Pilot-agent:基于kubernetesAPI资源对象为envoy初始化可用的bootstrap配置进行启动,在运行后管理envoy运行状态,如配置变更,出错重启等。 envoy:数据平面的执行层,由 pilot-agent 所启动的,从xDS API动态获取配置信息。Envoy并通过流量拦截机制处理入栈及出栈的流量。 envoy的listener 在运行在Kubernetes平台之上的istio,Envoy是通过Pilot将Kubernetes CRD资源 DestnationRule VirtualService Gateway等资源提供的配置,生成对应的Envoy配置。...

istio部署问题Q&A

端口绑定无权限 创建Gateway,提示绑定端口无权限。 text 1 2 3 2020-12-27T12:25:30.974288Z warning envoy config gRPC config for type.googleapis.com/envoy.config.listener.v3.Listener rejected: Error adding/updating listener(s) 0.0.0.0_90: cannot bind '0.0.0.0:90': Permission denied 问题原因:容器内默认权限不能使用非特权端口(<1024 导出部署清单部署失败 bash 1 istioctl manifest generate > generated-manifest.yaml 如果尝试使用来安装和管理Istio istioctl manifest generate,请注意以下警告: Istio名称空间(istio-system默认情况下)必须手动创建。 istioctl install 会从Kubernetes上下文中自动检测特定于环境的设置。如需手动安装需要执行如下步骤: --set values.global.jwtPolicy=third-party-jwt --set values.global.jwtPolicy=first-party-jwt refer token Generate a manifest

网络实验 - VxLAN

vXlan概念 实验 什么是VxLAN RFC定义了虚拟扩展局域网 VXLAN (Virtual eXtensible Local Area Network,)扩展方案,是对传统VLAN协议的一种扩展。VXLAN采用 (MAC in UDP(User Datagram Protocol)封装方式,是NVO3(Network Virtualization over Layer 3)中的一种网络虚拟化技术。VXLAN的特点是将L2的以太帧封装到UDP报文(即L2 over L4)中,并在L3网络中传输。 VXLAN本质上是一种隧道技术,在源网络设备与目的网络设备之间的IP网络上,建立一条逻辑隧道,将用户报文经过特定的封装后通过这条隧道转发。从用户的角度来看,接入网络的服务器就像是连接到了一个虚拟的二层交换机的不同端口上(可把蓝色虚框表示的数据中心VXLAN网络看成一个二层虚拟交换机),可以方便地通信。 为什么需要VxLAN 虚拟机规模受网络设备表项规格的限制 在传统二层网络环境下,数据报文是通过查询MAC地址表进行二层转发。服务器虚拟化后,VM的数量比原有的物理机发生了数量级的增长,伴随而来的便是VM网卡MAC地址数量的空前增加。而接入侧二层设备的MAC地址表规格较小,无法满足快速增长的VM数量。 网络隔离能力有限 VLAN作为当前主流的网络隔离技术,在标准定义中只有12比特,因此可用的VLAN数量仅4096个。对于公有云或其它大型虚拟化云计算服务这种动辄上万甚至更多租户的场景而言,VLAN的隔离能力无法满足。 虚拟机迁移范围受限 由于服务器资源等问题(如CPU过高,内存不够等),虚拟机迁移已经成为了一个常态性业务。 什么是虚拟机动态迁移? 所谓虚拟机动态迁移,是指在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理服务器移动到另一个物理服务器的过程。该过程对于最终用户来说是无感知的,从而使得管理员能够在不影响用户正常使用的情况下,灵活调配服务器资源,或者对物理服务器进行维修和升级。 在服务器虚拟化后,虚拟机动态迁移变得常态化,为了保证迁移时业务不中断,就要求在虚拟机迁移时,不仅虚拟机的IP地址、MAC地址等参数保持不变,而且虚拟机的运行状态也必须保持原状(例如TCP会话状态),所以虚拟机的动态迁移只能在同一个二层域中进行,而不能跨二层域迁移。 VxLAN方案 为了应对传统数据中心网络对服务器虚拟化技术的限制,VXLAN技术应运而生,其能够很好的解决上述问题。 针对虚拟机规模受设备表项规格限制 VXLAN将管理员规划的同一区域内的VM发出的原始报文封装成新的UDP报文,并使用物理网络的IP和MAC地址作为外层头,这样报文对网络中的其他设备只表现为封装后的参数。因此,极大降低了大二层网络对MAC地址规格的需求。 针对网络隔离能力限制 在传统的VLAN网络中,标准定义所支持的可用VLAN数量只有4000个左右。VXLAN引入了类似VLAN ID的用户标识,称为VXLAN网络标识VNI(VXLAN Network Identifier),由24比特组成,支持多达16M的VXLAN段,有效得解决了云计算中海量租户隔离的问题。 针对虚拟机迁移范围受限 VXLAN将VM发出的原始报文进行封装后通过VXLAN隧道进行传输,隧道两端的VM不需感知传输网络的物理架构。这样,对于具有同一网段IP地址的VM而言,即使其物理位置不在同一个二层网络中,但从逻辑上看,相当于处于同一个二层域。即VXLAN技术在三层网络之上,构建出了一个虚拟的大二层网络,只要虚拟机路由可达,就可以将其规划到同一个大二层网络中。这就解决了虚拟机迁移范围受限问题。 VxLAN与VLAN之间的区别 VLAN是传统的网络隔离技术,在标准定义中VLAN的数量只有4096,无法满足大型数据中心的租户间隔离需求。另外,VLAN的二层范围一般较小且固定,无法支持虚拟机大范围的动态迁移。 VXLAN完美地弥补了VLAN的上述不足,一方面通过VXLAN中的24比特VNI字段,提供多达16M租户的标识能力,远大于VLAN的4096;另一方面,VXLAN本质上在两台交换机之间构建了一条穿越数据中心基础IP网络的虚拟隧道,将数据中心网络虚拟成一个巨型“二层交换机”,满足虚拟机大范围动态迁移的需求。 VXLAN Header 增加VXLAN头(8字节),其中包含24比特的VNI字段,用来定义VXLAN网络中不同的租户。此外,还包含VXLAN Flags(8比特,取值为00001000)和两个保留字段(分别为24比特和8比特)。 UDP Header VXLAN头和原始以太帧一起作为UDP的数据。UDP头中,目的端口号(VXLAN Port)固定为4789,源端口号(UDP Src. Port)是原始以太帧通过哈希算法计算后的值。 Outer IP Header 封装外层IP头。其中,源IP地址(Outer Src. IP)为源VM所属VTEP的IP地址,目的IP地址(Outer Dst. IP)为目的VM所属VTEP的IP地址。 Outer MAC Header 封装外层以太头。其中,源MAC地址(Src. MAC Addr.)为源VM所属VTEP的MAC地址,目的MAC地址(Dst. MAC Addr....

网络实验 - VLAN

虚拟局域网VLAN(Virtual Local Area Network),是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。 VLAN内的主机间可以直接通信,而VLAN间不能直接通信,从而将广播报文限制在一个VLAN内。 以太网是一种基于CSMA/CD(Carrier Sense Multiple Access/Collision Detection)的共享通讯介质的数据网络通讯技术。当主机数目较多时会导致冲突严重、广播泛滥、性能显著下降甚至造成网络不可用等问题。通过交换机实现LAN互连虽然可以解决冲突严重的问题,但仍然不能隔离广播报文和提升网络质量。 在这种情况下出现了VLAN技术,这种技术可以把一个LAN划分成多个逻辑的VLAN,每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内一样,而VLAN间则不能直接互通,这样,广播报文就被限制在一个VLAN内。 VLAN的作用 限制广播域:广播域被限制在一个VLAN内,节省了带宽,提高了网络处理能力。 增强局域网的安全性:不同VLAN内的报文在传输时是相互隔离的,即一个VLAN内的用户不能和其它VLAN内的用户直接通信。 提高了网络的健壮性:故障被限制在一个VLAN内,本VLAN内的故障不会影响其他VLAN的正常工作。 灵活构建虚拟工作组:用VLAN可以划分不同的用户到不同的工作组,同一工作组的用户也不必局限于某一固定的物理范围,网络构建和维护更方便灵活。 VLAN Tag 要使交换机能够分辨不同VLAN的报文,需要在报文中添加标识VLAN信息的字段。IEEE 802.1Q协议规定,在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签(又称VLAN Tag,简称Tag),用以标识VLAN信息。 VLAN Tag各字段含义: 字段 长度 含义 取值 TPID 2Byte Tag Protocol Identifier(标签协议标识符),表示数据帧类型。 表示帧类型,取值为0x8100时表示IEEE 802.1Q的VLAN数据帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。各设备厂商可以自定义该字段的值。当邻居设备将TPID值配置为非0x8100时, 为了能够识别这样的报文,实现互通,必须在本设备上修改TPID值,确保和邻居设备的TPID值配置一致。 PRI 3bit Priority,表示数据帧的802.1p优先级。 取值范围为0~7,值越大优先级越高。当网络阻塞时,设备优先发送优先级高的数据帧。 CFI 1bit Canonical Format Indicator(标准格式指示位),表示MAC地址在不同的传输介质中是否以标准格式进行封装,用于兼容以太网和令牌环网。 CFI取值为0表示MAC地址以标准格式进行封装,为1表示以非标准格式封装。在以太网中,CFI的值为0。 VID 12bit VLAN ID,表示该数据帧所属VLAN的编号。 VLAN ID取值范围是0~4095。由于0和4095为协议保留取值,所以VLAN ID的有效取值范围是1~4094。 其中,数据帧中的VID(VLAN ID)字段标识了该数据帧所属的VLAN,数据帧只能在其所属VLAN内进行传输。 对于交换机来说,其内部处理的数据帧都带有VLAN标签,而现网中交换机连接的设备有些只会收发Untagged帧,要与这些设备交互,就需要接口能够识别Untagged帧并在收发时给帧添加、剥除VLAN标签。同时,现网中属于同一个VLAN的用户可能会被连接在不同的交换机上,且跨越交换机的VLAN可能不止一个,如果需要用户间的互通,就需要交换机间的接口能够同时识别和发送多个VLAN的数据帧。 VLAN PVID 缺省VLAN又称PVID(Port Default VLAN ID)。设备处理的数据帧都带Tag,当设备收到UNTagged帧时,就需要给该帧添加Tag,添加什么Tag,就由接口上的缺省VLAN决定。一个物理端口只能拥有一个PVID,当一个物理端口拥有了一个PVID的时候,必定会拥有和PVID相等的VID,而且在这个VID上,这个物理端口必定是Untagged Port。 因此,根据接口连接对象以及对收发数据帧处理的不同,华为定义了4种接口的链路类型:Access、Trunk、Hybrid和QinQ,以适应不同的连接和组网: Access接口:一般用于和不能识别Tag的用户终端(如用户主机、服务器等)相连,或者不需要区分不同VLAN成员时使用。Access接口大部分情况只能收发Untagged帧,且只能为Untagged帧添加唯一的VLAN Tag。 Trunk接口:一般用于连接交换机、路由器、AP以及可同时收发Tagged帧和Untagged帧的语音终端。它可以允许多个VLAN的帧带Tag通过,但只允许一个VLAN的帧从该类接口上发出时不带Tag(即剥除Tag)。 Hybrid接口:既可以用于连接不能识别Tag的用户终端(如用户主机、服务器等)和网络设备(如Hub、傻瓜交换机),也可以用于连接交换机、路由器以及可同时收发Tagged帧和Untagged帧的语音终端、AP。它可以允许多个VLAN的帧带Tag通过,且允许从该类接口发出的帧根据需要配置某些VLAN的帧带Tag(即不剥除Tag)、某些VLAN的帧不带Tag(即剥除Tag)。 使用QinQ(802.1Q-in-802.1Q)协议,一般用于私网与公网之间的连接,也被称为Dot1q-tunnel接口。它可以给帧加上双层Tag,即在原来Tag的基础上,给帧加上一个新的Tag,从而可以支持多达4094×4094个VLAN。 接口类型 对接收不带Tag的报文处理 对接收带Tag的报文处理 发送帧处理过程 Access接口 接收该报文,并打上缺省的VLAN ID。 当VLAN ID与缺省VLAN ID相同时,接收该报文。当VLAN ID与缺省VLAN ID不同时,丢弃该报文 先剥离帧的PVID Tag,然后再发送。 Trunk接口 打上缺省的VLAN ID,当缺省VLAN ID在允许通过的VLAN ID列表里时,接收该报文。打上缺省的VLAN ID,当缺省VLAN ID不在允许通过的VLAN ID列表里时,丢弃该报文。 当VLAN ID在接口允许通过的VLAN ID列表里时,接收该报文。当VLAN ID不在接口允许通过的VLAN ID列表里时,丢弃该报文 当VLAN ID与缺省VLAN ID相同,且是该接口允许通过的VLAN ID时,去掉Tag,发送该报文。当VLAN ID与缺省VLAN ID不同,且是该接口允许通过的VLAN ID时,保持原有Tag,发送该报文。 Hybrid接口 打上缺省的VLAN ID,当缺省VLAN ID在允许通过的VLAN ID列表里时,接收该报文。打上缺省的VLAN ID,当缺省VLAN ID不在允许通过的VLAN ID列表里时,丢弃该报文。 当VLAN ID在接口允许通过的VLAN ID列表里时,接收该报文。当VLAN ID不在接口允许通过的VLAN ID列表里时,丢弃该报文。 当VLAN ID是该接口允许通过的VLAN ID时,发送该报文。可以通过命令设置发送时是否携带Tag。 由上面各类接口添加或剥除VLAN标签的处理过程可见:...

深入理解Kubernetes Pod网络原理 - 网络名称空间

本文是关于深入理解Kubernetes网络原理系列第1章 深入理解Kubernetes Pod网络原理 - 网络名称空间 深入理解Kubernetes Pod网络原理 - Linux虚拟网络技术 深入理解Kubernetes Pod网络原理 - CNI 深入理解Kubernetes Pod网络原理 - 跟随 flannel 学习CNI原理 深入理解Kubernetes Pod网络原理 - 跟随 flannel + multus 剖析 Chained Plugins 深入理解Kubernetes Pod网络原理 - 从零实现一个 CNI Plugin part 1 (Shell) 深入理解Kubernetes Pod网络原理 - 从零实现一个 CNI Plugin part 2 (libcni) 深入理解Kubernetes Pod网络原理 - Kubernetes网络模型 1 深入理解Kubernetes Pod网络原理 - Kubernetes网络模型 2 深入理解Kubernetes Pod网络原理 - Pod网络排错思路 Linux namespace namespace是Linux内核的一项功能,该功能对内核资源进行分区,以使一组进程看到一组资源,而另一组进程看到另一组资源。该功能通过为一组资源和进程具有相同的名称空间而起作用,但是这些名称空间引用了不同的资源。资源可能存在于多个空间中。 Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个namespace中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。...

动态路由 - OSPF

Open Shortest Path First OSPF,开放的最短路径优先协议,是IETF组织开发的一个基于链路状态的内部网关协议,它的使用不受任何厂商限制,所有人都可以使用,所以称为开放的,而最短路径优先(SPF)只是OSPF的核心思想,其使用的算法是Dijkstra算法,最短路径优先并没有太多特殊的含义,并没有任何一个路由协议是最长路径优先的,所有协议,都会选最短的。 OSPF针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740) 目的: 在OSPF出现前,网络上广泛使用RIP(Routing Information Protocol)作为内部网关协议。 由于RIP是基于距离矢量算法的路由协议,存在着收敛慢、路由环路、可扩展性差等问题,所以逐渐被OSPF取代。 OSPF作为基于链路状态的协议,能够解决RIP所面临的诸多问题。此外,OSPF还有以下优点: OSPF采用组播形式收发报文,这样可以减少对其它不运行OSPF路由器的影响。 OSPF支持无类型域间选路(CIDR)。 OSPF支持对等价路由进行负载分担。 OSPF支持报文加密。 由于OSPF具有以上优势,使得OSPF作为优秀的内部网关协议被快速接收并广泛使用。 OSPF协议特点: OSPF把自治系统AS(Autonomous System)划分成逻辑意义上的一个或多个区域; OSPF通过LSA(Link State Advertisement)的形式发布路由; OSPF依靠在OSPF区域内各设备间交互OSPF报文来达到路由信息的统一; OSPF报文封装在IP报文内,可以采用单播或组播的形式发送。 OSPF工作流程 寻找邻居 OSPF协议运行后,先寻找网络中可与自己交互链路状态信息的周边路由器,可以交互链路状态信息的路由器互为邻居 建立邻居关系 邻接关系可以想象为一条点到点的虚链路,他是在一些邻居路由器之间构成的。只有建立了可靠邻接关系的路由器才相互传递链路状态信息。 链路状态信息传递 OSPF路由器将建立描述网络链路状态的LSA Link State Advertisement,链路状态公告,建立邻接关系的OSPF路由器之间将交互LSA,最终形成包含网络完整链路状态的配置信息。 计算路由 获得了完整的LSBD后,OSPF区域内的每个路由器将会对该区域的网络结构有相同的认识,随后各路由器将依据LSDB的信息用SPF算法独立计算出路由。 Router ID OSPF Router-ID用于在OSPF domain中唯一地表示一台OSPF路由器,从OSPF网络设计的角度,我们要求全OSPF域内,禁止出现两台路由器拥有相同的Router-ID。 OSPF Router-ID的设定可以通过手工配置的方式,或者通过协议自动选取的方式。当然,在实际网络部署中,强烈建议手工配置OSPF的Router-ID,因为这关系到协议的稳定。 实验:单区域OSPF配置 配置两台路由器 bash 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [Huawei]sysname R2 [R2]interface lo0 [R2-LoopBack0]ip add 2....

istio流量管理:非侵入式流量治理

在服务治理中,流量管理是一个广泛的话题,一般情况下,常用的包括: 动态修改服务访问的负载均衡策略,比如根据某个请求特征做会话保持; 同一个服务有多版本管理,将一部分流量切到某个版本上; 对服务进行保护,例如限制并发连接数、限制请求数、隔离故障服务实例等; 动态修改服务中的内容,或者模拟一个服务运行故障等。 在Istio中实现这些服务治理功能时无须修改任何应用的代码。较之微服务的SDK方式,Istio以一种更轻便、透明的方式向用户提供了这些功能。用户可以用自己喜欢的任意语言和框架进行开发,专注于自己的业务,完全不用嵌入任何治理逻辑。只要应用运行在Istio的基础设施上,就可以使用这些治理能力。 总结Istio流量治理的目标:以基础设施的方式提供给用户非侵入的流量治理能力,用户只需关注自己的业务逻辑开发,无须关注服务访问管理。 istio流量治理的核心组件Pilot 在istio1.8中,istio的分为 envoy (数据平面) 、istiod (控制平面) 、addons(管理插件) 及 istioctl (命令行工具,用于安装、配置、诊断分析等操作)组成。 Pilot是Istio控制平面流量管理的核心组件,管理和配置部署在Istio服务网格中的所有Envoy代理实例。 pilot-discovery为envoy sidecar提供服务发现,用于路由及流量的管理。通过kubernetes CRD资源获取网格的配置信息将其转换为xDS接口的标准数据格式后,通过gRPC分发至相关的envoy sidecar Pilot组件包含工作在控制平面中的 pilot-discovery 和工作与数据平面的pilot-agent 与Envoy(istio-proxy) pilot-discovery主要完成如下功能: 从service registry中获取服务信息 从apiserver中获取配置信息。 将服务信息与配置信息适配为xDS接口的标准数据格式,通过xDS api完成配置分发。 pilot-agent 主要完成如下功能 基于kubernetes apiserver为envoy初始化可用的boostrap配置文件并启动envoy。 管理监控envoy的云兄状态及配置重载。 envoy 每个sidecar中的envoy是由pilot-agent基于生产的bootstrap配置进行启动,并根据指定的pilot地址,通过xDS api动态获取配置。 sidecar形式的envoy通过流量拦截机制为应用程序实现入站和出站的代理功能。 Pilot的实现 在istio中的管理策略都是基于Kubernetes CRD的实现,其中有关于流量管理的CRD资源包括 VirtualService EnvoyFilter Gateway ServiceEntry Sidecar DestinationRule WorkloadEntry WorkloadGroup。reference istio-networking-crd-resouces VirtualServices:用于定义路由,可以理解为envoy的 listener => filter => route_config DestinationRule:用于定义集群,可以理解为envoy 的 cluster Gateway:用于定义作用于istio-ingress-gateway ServiceEntry:用于定义出站的路由,作用于istio-egress-gateway EnvoyFilter:为envoy添加过滤器或过滤器链。 Sidecar:用于定义运行在sidecar之上的envoy配置。 Virtual Services和 Destination Rules是Istio流量路由功能的核心组件...

goland在mod模式下不从vendor文件夹查找依赖

goland使用vendor作为获取依赖源 软件版本: system:windows10 1709 terminal: wsl ubuntu1804 goland:201903 goland 打开项目时使用mod模式,无法识别外部包的依赖 根据goland官方提示,开启时,将忽略go.mod依赖描述,所以就找不到相对应的依赖,但是编译时正常的。可以看到下图中,external libraries 并没有加载外部的库导致了无法识别。 此时想要正常使用的话,可以按照提示操作 将 goland 改为gopath模式,执行go mod vendor 将依赖同步到vendor 。此时正常。 当依赖更新时,可以手动添加对应的依赖库,go mod tidy 后 。因为vendor中没有新的依赖,需要手动执行下go mod vendor即可正常使用。 使用vendor编译 在编译时,可以使用 -mod=vendor 标记,使用代码主目录文件夹下vendor目录满足依赖获取,go build -mod=vendor。此时,go build 忽略go.mod 中的依赖,(这里仅使用代码root目录下的vendor其他地方的将忽略) GOFLAGS=-mod=vendor 设置顶级vendor作为依赖 go env -w GOFLAGS="-mod=vendor" 进行设置。 取消 go env -w GOFLAGS="-mod="

海信A6/A6L A7Pro/CC A5PRO/A5PRO CC 安装gms google service指南

用过海信双面屏或者eink手机的朋友都知道,海信手机就是死活安装不了谷歌全家桶,因为海信的领导说跟谷歌有协议不能安装谷歌框架(还说后期google审核坚决不给安装,人家其他ov mui都可以安装)。不信的朋友可以去海信论坛求证,杠精走开。 海信手机没有安装GSM Google Mobile Service 也没有 youtube,gmail,google map。在国外的朋友们用起来很难受,别说打游戏了,就日常出行也离不开google service,也是找了很久找到一个国外大神对海信A7 Pro下安装的教程,尝试在A6l也可以装,后面 Hisense A5PRO/CC Hisense A7/CC A6/A6L A2/A2Pro 其实都是通用的。 不过这个大神的教程并不是root来安装,对于在保的小伙伴们还是依然可以享受保修,系统升级(虽然海信基本百年不更新的),现在开始介绍下如何让海信eink系列获得GMS 安装步骤 下载 adb 关闭一堆系統內建的 垃圾 Apps 的功能(可以不关闭看自己了) 下载 Aurora Store (这步骤完全没用上,看个人了,国外大神推荐要下载) 先依照順序 安裝 4个基础服务 apk,安装完成后可以正常登陆google账号了 再 按照顺序 安裝 3个 其他服务 apk(可以不按照顺序,国外大神说的是需要按照顺序) 前置步驟:开启开发者模式 打开 开发者模式 步骤1:下载安装 adb 程序 Mac可以直接输入命令:brew install android-platform-tools 具体 brew 是啥自行百度 Windows 平台参考: 先从这里下载 adb,然后下一步,下一步就行,到安装完成。 安装好后启动 adb,这里只介绍几个命令,对于装个 GAPPS 已经足够了。 查看设备:adb devices 看到xxxxxx device即表示连接成功 查看手机IP: adb shell ifconfig wlan0 通过IP地址连接手机:adb connect <device-ip-address> 断开连接:adb disconnect <device-ip-address> 设备监听:adb tcpip 5555 这里差不多了,更多可以参考下这里,下面开始介绍如何连接手机...