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

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

  • Flannel vxlan
    • DR模式实现
  • calico网络插件替换flannel
  • calico支持的网络策略-访问控制
  • Ingress-nginx七层负载均衡实现
    • 安装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 ## 编辑文件

企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第1张图片
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第2张图片
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第3张图片
在这里插入图片描述
在这里插入图片描述

calico网络插件替换flannel

server1
打标签 上传至harbor仓库

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

企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第4张图片
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第5张图片
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第6张图片
server2

修改yaml资源清单,使得镜像拉取本地harbor仓库。(需要修改全部的image路径)
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第7张图片
删除之前的网络插件flannel

kubectl delete -f kube-flannel.yml

企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第8张图片
必要步骤:删除所有k8s节点的插件配置缓存文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
拉起插件,等待初始化

kubectl apply -f calico.yaml

企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第9张图片
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第10张图片
初始化完毕后查看节点

kubectl get pod -n kube-system

企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第11张图片

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仓库
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第12张图片

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

企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第13张图片
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第14张图片
在这里插入图片描述
官网下载ingress-nginx部署所需资源清单,修改镜像get地址为本地harbor仓库
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第15张图片
拉起pod节点,kubectl apply -f deploy.yaml
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第16张图片
查看生成的namespace状态

kubectl get ns

企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第17张图片
查看ingress-nginx的所有信息,可以看到ingress-nginx-controller已经running

kubectl -n ingress-nginx get all

企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第18张图片
查看svc暴露端口

kubectl -n ingress-nginx get svc

企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第19张图片
访问测试:
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第20张图片
配置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

企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第21张图片
修改svc配置文件为负载均衡
kubectl -n ingress-nginx edit svc ingress-nginx-controller
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第22张图片

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,通过标签来锁定域名
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第23张图片
为标签为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信息
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第24张图片
查看节点endpoint服务是否健康

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

企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第25张图片
企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第26张图片
配置服务与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

企业入门实战--k8s之vxlan 、calico、 ingress实现七层负载均衡_第27张图片

你可能感兴趣的:(企业入门实战,calico,k8s,运维)