k8s之Ingress讲解

一、Ingress基本介绍

Ingress是管理k8s外部访问(http/https)的API对象,提供应用层的路由功能,处理第七层(http/https)流量,支持基于域名、路径的路由。与service不同的是,service处理第四次(tcp/udp)流量,通过ClusterIP、Nodeport或者LoadBalancer暴露服务。

Ingress是k8s中管理外部流量的核心组件,通过灵活的路由规则和丰富的控制器生态满足多样化需求。

二、Ingress部署

本文采用的ingress的控制器为Traefik

1.下载镜像和yaml文件

traefik镜像和yaml文件可在此次下载

2.导入镜像或者拉取镜像

bash 复制代码
[root@node-1 ~]# docker pull traefik:2.9
[root@node-2 ~]# docker load -i traefik.2.9.tar.gz

3.创建Traefik资源

bash 复制代码
#创建Traefik CRD资源(master-1)
[root@master-1 ingress]#  kubectl apply -f traefik-crd.yaml
#创建Traefik  RABC文件(master-1)
[root@master-1 ingress]# kubectl create -f traefik-rbac.yaml
#创建配置文件
[root@master-1 ingress]# kubectl apply -f traefik-config.yaml
#设置节点标签(注意主机名) traefik-deploy有用到
[root@master-1 ingress]# kubectl label nodes node-1 IngressProxy=true
node/node-1 labeled
#注意每个Node节点的80与443端口不能被占用
[root@master-1 ingress]# netstat -antupl | grep -E "80|443"
#部署 Traefik deploy资源
#注意修改k8s集群VIP 192.168.91.254
[root@master-1 ingress]# kubectl apply -f traefik-deploy.yaml
daemonset.apps/traefik-ingress-controller created
[root@master-1 ingress]# kubectl get pods -n kube-system
NAME                               READY   STATUS    RESTARTS   AGE
traefik-ingress-controller-ktdvl   1/1     Running   0          15s

#部署sevice 
[root@master-1 ingress]# kubectl apply -f traefik-service.yaml
service/traefik created
[root@master-1 ingress]# kubectl get svc -n kube-system
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                                     AGE
traefik      NodePort    10.0.0.127   <none>        80:47646/TCP,443:32007/TCP,8080:44168/TCP   7s
#访问web页面
http://192.168.91.21:44168

4.Traefik 路由配置

bash 复制代码
#访问ingress.liux.com  代理到 8080业务
[root@master-1 ingress]# vim traefik-dashboard-route.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: traefik-dashboard-route
  namespace: kube-system
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`ingress.liux.com`)
      kin1d: Rule
      services:
        - name: traefik
          port: 8080
[root@master-1 ingress]# kubectl apply -f traefik-dashboard-route.yaml
#配置hosts
[root@master-1 ingress]# vim /etc/hosts
192.168.91.21  node-1 ingress.liux.com
[root@master-1 ingress]# curl ingress.liux.com
Moved Permanently
#如上代表成功了
#windows上配置hosts 
192.168.91.21  ingress.liux.com
#访问
http://ingress.liux.com/dashboard/#/  正常,说明代理成功了

5.ingress代理nginx

bash 复制代码
[root@master-1 ingress]# kubectl get svc -n kube-system
NAME  TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                               nginx-demo   NodePort    10.0.0.3     <none>        88:40132/TCP                     
#编写Traefik 路由配置  访问nginx.liux.com 代理到nginx的88端口
[root@master-1 ingress]# cat nginx-route.yaml 
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: nginx-route
  namespace: kube-system
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`nginx.liux.com`)
      kind: Rule
      services:
        - name: nginx-demo
          port: 88
[root@master-1 ingress]# kubectl apply -f nginx-route.yaml
[root@master-1 ingress]# kubectl get ingressroute -n kube-system
NAME                      AGE
nginx-route               45s
traefik-dashboard-route   23m
#配置hosts
192.168.91.21 nginx.liux.com
#页面访问 显示nginx页面
http://nginx.liux.com/

6.ingress代理nginx的443端口

6.1 生成自签证书

bash 复制代码
[root@master-1 ingress]# openssl req -x509 -newkey rsa:2048 -nodes -keyout tls.key -out tls.crt -days 365 -subj "/CN=cloud.liux.com"

6.2 将证书存储在secret

bash 复制代码
[root@master-1 ingress]# kubectl create secret tls liux-tls --cert=tls.crt --key=tls.key -n kube-system
[root@master-1 ingress]# kubectl get secret -n kube-system | grep liux-tls
liux-tls        kubernetes.io/tls                     2      16s

6.3 创建路由规则文件

bash 复制代码
[root@master-1 ingress]# cat nginx-route-https.yaml 
#注意命名空间 namespace与要代理的服务需要在同一个名称空间
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: nginx-https-route
  namespace: kube-system
spec:
  entryPoints:
    - websecure
  tls:
    secretName: liux-tls
  routes:
    - match: Host(`cloud.liux.com`) 
      kind: Rule
      services:
        - name: nginx-demo
          port: 88
#创建 Kubernetes Dashboard 路由规则对象
[root@master-1 ingress]# kubectl apply  -f nginx-route-https.yaml 
#配置hosts
192.168.91.21 cloud.liux.com
#使用https页面访问 显示nginx页面
https://cloud.liux.com/
相关推荐
ghostwritten1 分钟前
Run Milvus in Kubernetes with Milvus Operator
容器·kubernetes·milvus
Zero_to_zero123418 分钟前
解决docker的ubuntu系统中文乱码问题
ubuntu·docker·容器
@郭小茶18 分钟前
docker-compose方式部署docker项目
运维·docker·容器
duration~2 小时前
K8S自定义CRD
容器·贪心算法·kubernetes
ghostwritten3 小时前
Docker Registry Clean
运维·docker·容器
宋冠巡4 小时前
Windows安装Docker(Docker Desktop)
windows·docker·容器
小马爱打代码5 小时前
Kubernetes 中部署 Ceph,构建高可用分布式存储服务
分布式·ceph·kubernetes
阿噜噜小栈5 小时前
最新国内可用的Docker镜像加速器地址收集
运维·笔记·docker·容器
云上艺旅5 小时前
K8S学习之基础六十八:Rancher创建deployments资源
学习·云原生·容器·kubernetes·rancher
rider1895 小时前
【4】搭建k8s集群系列(二进制部署)之安装master节点服务(kube-apiserver)
云原生·容器·kubernetes