企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡

Flannel vxlan

DR模式实现

flannel支持多种后端,包括
vxlan默认报文封装模式,适用于跨网段通信
Directrouting直连路由模式,适用于同网段通信。表现为host-gw,主机网关,性能好,但只能在二层网络中,不支持跨网。

flannel 会缓存所有节点的mac地址
两个eth0 如何知道对方的ip:桥接数据库

kubectl -n kube-system get cm
 kubectl -n kube-system get pod
kubectl -n kube-system edit cm kube-flannel-cfg ## 编辑文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

calico网络插件替换flannel

server1
打标签 上传至harbor仓库

docker load -i calico-v3.19.1.tar
docker images |grep calico |awk '{system("docker push "$1":"$2"")

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
server2

修改yaml资源清单,使得镜像拉取本地harbor仓库。(需要修改全部的image路径)
在这里插入图片描述
删除之前的网络插件flannel

kubectl delete -f kube-flannel.yml

在这里插入图片描述
必要步骤:删除所有k8s节点的插件配置缓存文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
拉起插件,等待初始化

kubectl apply -f calico.yaml

在这里插入图片描述
在这里插入图片描述
初始化完毕后查看节点

kubectl get pod -n kube-system

在这里插入图片描述

calico支持的网络策略-访问控制

限制访问指定服务:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-nginx
spec:
  podSelector:
    matchLabels:
      app: nginx

允许指定pod访问服务:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: access-nginx
spec:
  podSelector:
    matchLabels:
      app: nginx
  ingress:
  - from:
      - podSelector:
          matchLabels:
            app: demo

禁止 namespace 中所有 Pod 之间的相互访问:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: default
spec:
  podSelector: {}

禁止其他 namespace 访问服务:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: deny-namespace
spec:
  podSelector:
    matchLabels:
  ingress:
  - from:
    - podSelector: {}

只允许指定namespace访问服务:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: access-namespace
spec:
  podSelector:
    matchLabels:
      app: myapp
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          role: prod

允许外网访问:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: web-allow-external
spec:
  podSelector:
    matchLabels:
      app: web
  ingress:
  - ports:
    - port: 80
    from: []

Ingress-nginx七层负载均衡实现

安装Ingress

,harbor仓库中新建项目ingress-nginx,压入镜像到harbor仓库
在这里插入图片描述

docker tag reg.westos.org/ingress-nginx/controller:v0.48.1 hyl.westos.org/ingress-nginx/controller:v0.48.1
docker tag reg.westos.org/ingress-nginx/kube-webhook-certgen:v1.5.1 hyl.westos.org/ingress-nginx/kube-webhook-certgen:v1.5.1
docker push hyl.westos.org/ingress-nginx/controller:v0.48.1
docker push hyl.westos.org/ingress-nginx/kube-webhook-certgen:v1.5.1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
官网下载ingress-nginx部署所需资源清单,修改镜像get地址为本地harbor仓库
在这里插入图片描述
拉起pod节点,kubectl apply -f deploy.yaml
在这里插入图片描述
查看生成的namespace状态

kubectl get ns

在这里插入图片描述
查看ingress-nginx的所有信息,可以看到ingress-nginx-controller已经running

kubectl -n ingress-nginx get all

在这里插入图片描述
查看svc暴露端口

kubectl -n ingress-nginx get svc

在这里插入图片描述
访问测试:
在这里插入图片描述
配置ingress-nginx七层均衡
添加svc服务
vim svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysvc
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  selector:
    app: myapp

拉起服务并查看endpoint

在这里插入图片描述
修改svc配置文件为负载均衡
kubectl -n ingress-nginx edit svc ingress-nginx-controller
在这里插入图片描述

kubectl -n ingress-nginx get svc

在这里插入图片描述
vim deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: myapp:v2

拉起deployment,通过标签来锁定域名
在这里插入图片描述
为标签为nginx的deployment添加服务
vim svc.yaml


apiVersion: v1
kind: Service
metadata:
name: myapp-svc
spec:
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: myapp
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
ports:
kubectl apply -f deployment.yaml
kubectl apply -f svc.yaml
kubectl -n ingress-nginx get all
kubectl get ns
测试:
curl www1.westos.org/hostname.html
curl www2.westos.org/hostname.html
- protocol: TCP
port: 80
targetPort: 80
selector:
app: nginx

查看svc信息
在这里插入图片描述
查看节点endpoint服务是否健康

kubectl describe svc myapp-svc
kubectl describe svc nginx-svc

在这里插入图片描述
在这里插入图片描述
配置服务与ingress连接,并给定域名
vim ingress.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx
spec:
  rules:
  - host: www1.westos.org
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-svc
          servicePort: 80

---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-myapp
spec:
  rules:
  - host: www2.westos.org
    http:
      paths:
      - path: /
        backend:
          serviceName: myapp-svc
          servicePort: 80

拉起资源清单

kubectl apply -f ingress.yaml

在这里插入图片描述
查看ingress反向代理信息

kubectl get ingress

在这里插入图片描述
测试:
测试机添加解析到服务节点172.25.5.10

172.25.5.10  www1.westos.org  www2.westos.org

访问测试

curl www1.westos.org
curl www2.westos.org

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
华为二层Vxlan和三层Vxlan是两种不同的虚拟化技术,用于在数据中心网络中实现虚拟隧道的功能。它们有不同的配置要求和使用场景。 1. 二层Vxlan配置说明: 二层Vxlan(Virtual Extensible LAN)是在二层以太网基础上实现虚拟化隧道的技术。它将数据包封装在UDP报文中,通过隧道传输,在底层网络中实现逻辑网络的扩展。 配置步骤如下: - 创建Vxlan实例:创建一个Vxlan实例,并指定相应的ID和名称。 - 配置隧道接口:指定Vxlan实例与底层物理网络的连接接口,并配置相应的IP地址。 - 配置Vxlan隧道:指定Vxlan实例的隧道属性,包括远程VTEP(Vxlan Tunnel Endpoint)的IP地址和VNI(Virtual Network Identifier)等。 - 配置Vxlan转发:将需要通过Vxlan隧道转发的流量指向相应的Vxlan实例。 2. 三层Vxlan配置说明: 三层Vxlan(Virtual Extensible LAN)是在三层IP网络基础上实现虚拟化隧道的技术。它将数据包封装在UDP报文中,通过隧道传输,在底层网络中实现逻辑网络的扩展。 配置步骤如下: - 创建Vxlan实例:创建一个Vxlan实例,并指定相应的ID和名称。 - 配置隧道接口:指定Vxlan实例与底层物理网络的连接接口,并配置相应的IP地址。 - 配置Vxlan隧道:指定Vxlan实例的隧道属性,包括远程VTEP(Vxlan Tunnel Endpoint)的IP地址和VNI(Virtual Network Identifier)等。 - 配置三层转发:在底层网络中配置路由,将需要通过Vxlan隧道转发的流量指向相应的Vxlan实例。 需要注意的是,二层Vxlan适用于在数据中心内部扩展二层网络,而三层Vxlan适用于在不同数据中心之间扩展三层网络。配置时需要根据具体的网络拓扑和需求来选择适合的Vxlan技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值