应用

时间:2024-06-08 22:01:04

实验环境

虚拟机

Ip 主机名 cpu 内存 硬盘
192.168.10.11 master01 2cpu双核 4G 100G
192.168.10.12 worker01 2cpu双核 4G 100G
192.168.10.13 worker02 2cpu双核 4G 100G
192.168.10.16 vm6 1cpu1核 1G 20G

版本 centos7.9
已部署k8s-1.27
vm6 无需配置,测试使用

部署nginx ingress controller

1.安装metalLB

具体步骤详情作者上篇博客
链接: metalLB负载均衡器
这里不再过多描述

2.nginx ingress controller部署

下载并修改配置文件 需要vpn

curl -k https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/deploy.yaml  -o deploy.yaml

修改文件

vim deploy.yaml

修改此行 type: NodePort
为 type: LoadBalancer

修改前
在这里插入图片描述
修改后
在这里插入图片描述

创建

kubectl apply -f deploy.yaml

稍等几分钟后查看 需要vpn,没有的话查看信息时会显示连接不到镜像仓库

kubectl -n ingress-nginx get pod

可以看到已经成功运行了
在这里插入图片描述

3.ingress 对象应用案例(基于名称的负载均衡)

ingress-http案例:基于名称的负载均衡

(1) 创建deployment控制器类型应用
vim nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: ingress-nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: c1
        image: nginx:1.20
        imagePullPolicy: IfNotPresent

应用YAML

kubectl apply -f nginx.yaml

验证pod

kubectl get pods -n ingress-nginx

在这里插入图片描述

(2) 创建service
vim nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: ingress-nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
app: nginx

应用YAML

vim nginx-service.yaml

查看service

kubectl get svc -n ingress-nginx

在这里插入图片描述
默认service类型是ClusterIP

(3) 创建ingress对象
vim ingress-nginx.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx                    			#自定义ingress对象名称
  namespace: ingress-nginx
  annotations:									#注解,声明
    ingressclass.kubernetes.io/is-default-class: "true"		#ingress控制器由标记的class作为默认class
spec:
  ingressClassName: nginx							#此处标记出ingressClass为nginx
  rules:
  - host: www.test.com                   			# 自定义域名
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: nginx-service     				# 对应上面创建的service名称
            port:
              number: 80

应用YAML

kubectl apply -f ingress-nginx.yaml

验证ingress对象

kubectl get ingress -n ingress-nginx

在这里插入图片描述

描述查看ingress信息

kubectl describe ingress ingress-nginx -n ingress-nginx

在这里插入图片描述

kubectl get pods -o wide -n ingress-nginx

在这里插入图片描述

可以看到两个pod的IP正好对应ingress域名对应的IP
确认nginx-ingress-controller的podIP为192.168.10.240

(4) 模拟客户端访问

确认nginx-ingress-controller的podIP, 下面命令查询的结果为192.168.10.240

kubectl get svc -n ingress-nginx | grep ingress

在这里插入图片描述
在集群之外任一主机中添加上述域名与IP地址解析(模拟公网DNS)
这里是192.168.10.16

vim /etc/hosts
192.168.10.240 www.test.com

准备pod内容器运行的web主页
查看

kubectl get pods  -n ingress-nginx

在这里插入图片描述

进入容器添加html文件

kubectl -n ingress-nginx exec -it nginx-c9f79b6f4-9xdms -- bash
echo "ingress web1" > /usr/share/nginx/html/index.html
exit

第二个

kubectl -n ingress-nginx exec -it nginx-c9f79b6f4-jqwsx -- bash
echo "ingress web2" > /usr/share/nginx/html/index.html
exit

去集群外的主机上测试
在这里插入图片描述

完成