企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡

企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡

  • 前言
  • Ingress-nginx七层负载均衡实现
    • 安装Ingress
    • 配置ingress-nginx七层均衡


前言

上一篇学习笔记中,我们了解并应用了k8s的calico网络插件。本章将在其基础上通过Ingress-nginx实现k8s的七层负载均衡。相比较之前的四层负载均衡会多一些重定向、反向代理等功能。

Ingress-nginx七层负载均衡实现

Ingress是一个API对象,和其他对象一样,通过yaml文件来配置。ingress通过http或https暴露集群内部service,给service提供外部URL、负载均衡、SSL/TLS能力以及基于host的方向代理。

安装Ingress

镜像准备:

,harbor仓库中新建项目ingress-nginx,压入镜像到harbor仓库

企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第1张图片

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学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第2张图片
进入仓库查看镜像是否上传成功
企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第3张图片
官网下载ingress-nginx部署所需资源清单,修改镜像get地址为本地harbor仓库。
企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第4张图片
拉起pod节点,kubectl apply -f deploy.yaml

企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第5张图片查看生成的namespace状态

kubectl get ns

企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第6张图片

查看ingress-nginx的所有信息,可以看到ingress-nginx-controller已经running

kubectl -n ingress-nginx get all

企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第7张图片
查看svc暴露端口

kubectl -n ingress-nginx get svc

在这里插入图片描述
访问测试:
企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第8张图片

配置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学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第9张图片

修改svc配置文件为负载均衡
kubectl -n ingress-nginx edit svc ingress-nginx-controller
企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第10张图片
查看修改内容

kubectl -n ingress-nginx get svc

企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第11张图片
可以通过此方式动态分配IP,而不是占用主机资源
企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第12张图片
修改deployment标签,为重定向作准备,给定不同版本的镜像,方便看到反向代理的结果差异。之前标签myapp的版本是v1 这里是版本v2

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学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第13张图片
为标签为nginx的deployment添加服务
vim nginx-svc.yaml

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

修改标签为myapp的svc名称,方便对比
重新拉起两个svc

kubectl apply -f nginx-svc.yaml
kubectl apply -f myapp-svc.yaml

查看svc信息
企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第14张图片
查看节点endpoint服务是否健康

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

企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第15张图片

配置服务与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

企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第16张图片
查看ingress反向代理信息

kubectl get ingress

企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第17张图片
测试:
测试机添加解析到服务节点172.25.9.10
企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第18张图片
访问测试:

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

企业运维实战--k8s学习笔记5.Service之通过Ingress-nginx实现k8s七层负载均衡_第19张图片

你可能感兴趣的:(运维,kubernetes,ingress,ingress-nginx,k8s)