强调: 本文只是作为'记录',过一段时间会'删除'
跟唐老师学习网络
一 Nginx Ingress管理
① 流量走向
需求: 应用绑定'LoadBalance',会自动创建或使用'SLB'
eip:port --> nodeport_ip:port --> service_ip:port --> pod_ip:port
支持的注解
通过阿里云负载均衡SLB暴露的服务 Service
通过使用自动创建SLB的服务公开应用
② 阿里云厂商的特殊注解
'原Ingress Class'为nginx-intranet
annotations:
kubernetes.io/ingress.class: nginx-intranet
ACK 自身的'ingress' --> ack-ingress-nginx'或'ack-ingress-nginx-v1
通过Annotation配置传统型负载均衡CLB
Annotation:
需求: 使用'已有'的负载均衡
备注: 负载均衡'实例的ID',通过此Annotation指定'已有的CLB'
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id --> '重要'
负载均衡实例'名称'
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name
为TCP类型的负载均衡配置'会话保持'时间
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-persistence-timeout
++++++++++++++++++++++ "分割线" ++++++++++++++++++++++
需求: ingress使用公有云的'负载均衡 LoadBalance'类型
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type
1、internet:服务通过'公网'访问,此为'默认'值,对应'CLB的地址'类型必须为'公网'
2、intranet:服务通过'私网'访问,对应CLB的地址类型必须为'私网'
nginx-ingress-controller.yaml
③ 相关信息
执行 kubectl edit deploy nginx-ingress-controller -n kube-system
--> 打开Ingress Controller的'配置'文件
++++++++++++++++++++++ "分割线" ++++++++++++++++++++++
当您成功创建一个集群后,'默认'情况下:
1、集群内部已经部署了一套拥有2个Pod副本的Nginx Ingress Controller服务
2、其'前端'挂载在一个'公网SLB'实例上
++++++++++++++++++++++ "分割线" ++++++++++++++++++++++
需求: 查看nginx-ingress-lb服务对应的'公网SLB地址'
kubectl -n kube-system get svc nginx-ingress-lb
④ 部署Ingress Controller使用私网SLB
私网'SLB' --> 可以和'同一vpc内'非集群内的节点进行'通信'
⑤ 无法访问Ingress Controller自己
⑥ Ingress Pod中无法保留源IP
⑦ Ingress规则没有生效
⑧ Nginx Ingress Controller
1、当前'Kubernetes官方维护'的是Nginx Ingress Controller
2、ACK基于'社区版'的Nginx Ingress Controller进行了'优化'
3、ACK的Nginx Ingress Controller与社区Nginx Ingress Controller完全'兼容'
4、支持社区'所有的Annotation'
5、您在ACK集群或ACK Serverless集群选择'安装的Nginx Ingress Controller'组件
6、即为'定制版'的Nginx Ingress Controller组件
备注: Nginx Ingress需要您'自行'维护
⑨ 使用Nginx Ingress Controller时注意事项
⑩ 修改ingress日志格式
kubectl edit cm nginx-ingress-controller -n kube-system '更新ConfigMap'
--> '修改日志格式' --> log-format-upstream:
默认的日志访问记录输出到'/dev/stdout'
做日志切割
Nginx Ingress高级用法
Nginx Ingress FAQ
二 全景剖析阿里云容器网络数据链路 Flannel
① 阿里云使用Flannel网络插件
1、ifconfig --> 查看'cni0、docker0'
2、集群的每个节点会起一个'flannel agent',并且会给每个节点'预分配一个Pod CIDR'
备注: 这个Pod CIDR是ACK集群的'Pod CIDR'的'子集'
②
1、容器的'网络命名空间内'会有一个'eth0'的虚拟网卡,同时存在'下一跳'指向该网卡的路由
2、该网卡会作为容器和宿主内核进行数据交换的'出入'口
3、容器和宿主机之间的数据链路是通过'veth pair'进行'交换'的
思考: 现在我们'已经找到'veth pair其中一个,如何去'找另一个veth'呢?
容器内: ip route show
查看docker 容器 在'宿主机器'的'pid'
docker inspect -f {{.State.Pid}} nginx
宿主机: nsenter -n -t 'pid' 进入 '容器'的命名空间 --> 查看 'eth0@ifxxx' 标识
在'容器'所在的宿主机: ip addr | grep xxx: --> 可以找到'vethd7e7c6fd'这个'虚拟'网卡
各种场景的描述
Cloud Controller Manager CCM
ACK专有集群配置VPC多路由表
1、使用命令kubectl edit cm -n kube-system cloud-config修改cloud-config配置项文件
备注: 将配置项文件中的${ROUTE_TABLES_IDS}替换为您的'VPC路由表ID'
"routeTableIDs": "${ROUTE_TABLES_IDS}"
kubectl edit cm -n kube-system kube-flannel-cfg
kubectl -n kube-system get pod -o wide -l app=flannel
三 EDAS相关
EDAS 创建应用后复用CLB
Spring Cloud 接入 EDAS 服务注册与发现
EDAS'共享注册中心'地址
创建EDAS 微服务空间可以选择共享注册中心
application.propertites 配置信息
堡垒机: http://${nacos_sip}:${nacos_ip}/nacos --> nacos密码形式'查看'
C:\Windows\System32\drivers\etc\hosts
启动轻量级配置及注册中心
edas-lightweight-server --> 'tgz'包
find / -name startup.sh
8848:用来支持基于Nacos应用的配置管理及服务注册
关键: 'jmenv'
绑定hosts之后,可以直接访问'轻量级配置及注册中心域名+端口' jmenv.tbsite.net:8080
独立机器: 在'浏览器'中输入轻量级配置及注册中心地址'http://机器IP地址:8080'并回车