官网地址: 服务(Service) | Kuberneteshttps://v1-24.docs.kubernetes.io/zh-cn/docs/concepts/services-networking/service/
一 . 网络通信原理
二. service作用及类型
三. IPVS模式设置
kubelet管理容器生命周期 kube-proxy是管理网络流量的
1. 安装查看策略工具
2. 修改 kube-proxy配置
3. 修改配置后需要重载或重启服务,这里直接删除重建
4. 可以用ip a 查看网络信息(会出现虚拟网卡ipvs0)
IPVS模式下,kube-proxy会在service创建后,在宿主机上添加一个虚拟网卡并分配service IP
5. 查看策略
kube-proxy通过linux的IPVS模块,以rr轮询的方式调度service中的pod
6. 查看其他节点的mac地址
四. 修改flannel网络模式
1. 改为主机网关模式并删除pod自动重建使其生效
此时查看已经生效
五. 开始创建service(默认为ClusterIP)
1. 创建编辑文件 vim clusterip.yaml
2. 使其生效并查看svc
3. 通过之前deployment控制器创建pod并使其生效
4. 查看service详情
5. 此时ip a查看到多了service暴露的IP
6. 查看策略且为负载均衡
7. 查看dns解析
六. Headless Service服务
1. 创建编辑文件 vim headless.yaml
2. headless通过svc名称访问,由集群内dns提供解析
七. 开始创建service(Nodeport)
在每个集群节点设置了端口,只要访问给定的端口就可以访问服务
1. 创建编辑文件 vim nodeport.yaml
2. 应用后查看svc (nodeport就是在ClusterIP上绑了一个端口)
3. 也可以直接修改类型 kubectl edit svc my-nginx
4. 此时用集群外访问任何一个节点都可以
访问集群任何一个节点端口时候,流量就到达集群,然后转发到集群内的vip
5. 指定端口方法 vim /etc/kubernetes/manifests/kube-apiserver.yaml
(nodeport默认端口范围:30000-32767)修改后api-server会自动重启
6. 在编辑文件添加参数后重新应用即可
八. 开始创建service(LoadBalancer)
LoadBalancer在集群外是有负载均衡的,并不是k8s的功能,是从公有云平台分配的地址,直接访问给的地址会直接转发到节点端口nodeport上,在进入到集群内,这样一个服务就可以分配一个地址
1. 创建编辑文件 vim loadbalancer.yaml
2. 应用后查看处于Pending状态表示没有分配IP (只要访问分配的IP就转发到指定端口)
因为公有云要收费 metallb用来实现在私有化搭建的裸机环境中实现负载均衡器的功能,在没有云环境的情况下通过metallb将service暴露到网络环境中,供其他系统访问。
在裸金属环境中模拟云端环境,分配ip
它的作用就是通过k8s原生的方式提供LB(LoadBalancer )类型的Service支持,开箱即用。
官网: MetalLB, bare metal load-balancer for Kubernetes
1. 修改配置文件 kubectl edit configmap -n kube-system kube-proxy
2. 删除kube-proxy里边的pod自动重建
3. 下载部署文件
wget https://raw.githubusercontent.com/metallb/metallb/v0.13.9/config/manifests/metallb-native.yaml
4. 编辑文件 将两个镜像路径修改和仓库一致 新创建的目录 metallb/vim metallb-native.yaml
5. 仓库创建新项目将上面所需镜像下载上传进去
3. 应用配置文件并查看pod就绪
4. 创建编辑文件 vim config.yaml
5. 应用后查看分配地址成功 且集群外可以访问
九 . 开始创建service(externalname)
再做一些应用迁移时候常用,有的应用在集群内,有的应用在集群外,一般用来迁移应用.外部资源变更的时候我们只需要更改资源设置就行,而不用变更我们的应用连接
1. 创建编辑文件 vim externalname.yaml
2. 用命令查看解析
3. 更改对外连接资源查看
十. Ingress-nginx
Ingress | Kuberneteshttps://v1-24.docs.kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/
(1)功能简介
(2)下载官方地址:Installation Guide - Ingress-Nginx Controller (kubernetes.github.io)
(3)开始部署实验环境
1. 下载部署文件
2. 查看所需镜像下载并修改三处镜像为仓库路径
3. 创建新的项目将镜像上传进去
4. 应用文件并查看pod情况
5. 将my-nginx控制器loadbalancer模式改为ClusterIP
方便实验将这里修改,因为Clusterip只能在集群内访问,为了测试Ingress功能,用ingress七层方式把应用暴露出去
开始Ingress控制器环节
1. 修改Ingress控制器的类型
2. 创建编辑文件并应用 vim myapp-deploy.yaml
当访问不同域名的时候定义到不同的svc上
kind: Ingress
metadata:
name: name-virtual-host-ingress
spec:
ingressClassName: nginx
rules:
- host: nginx.westos.org
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: my-nginx
port:
number: 80
- host: myapp.westos.org
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: my-myapp
port
number: 80
3. 创建ingres路由规则,基于域名转发
4. Ingress规则必须和上面创建的两个svc必须处于同一个namespace
5. 在集群外的主机上添加解析即可访问
十一. Ingress TLS配置
Basic Authentication - Ingress-Nginx Controller (kubernetes.github.io)https://kubernetes.github.io/ingress-nginx/examples/auth/basic/
1. 生成自签名证书 2.上面生成的tls两个文件在操作系统中存放,要让集群能够识别到,create将其创建为集群的资源
3. 编辑文件添加模块后应用文件并详情查看是否成功 vim ingress.yaml
4. 集群外访问即可
十二. auth认证(做完加密后做认证)
1. 创建auth文件
2. create将其创建为集群的资源
3.编辑文件添加模块后应用文件并详情查看是否成功 vim ingress.yaml
4.集群外尝试访问即可
十三. Rewrite重定向
1. 编辑文件添加参数后应用 vim ingress.yaml
2. 没修改前访问
3. 修改后访问即重定向