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/
相关推荐
@insist1232 小时前
系统集成项目管理工程师-安全架构与云原生架构
云原生·架构·软考·安全架构·系统集成项目管理工程师·软考中项·软件水平考试
阿里云云原生6 小时前
一张告警卡片到一键 RCA:塔斯汀万店连锁的智能运维闭环实践
云原生
坐吃山猪7 小时前
Docker07-MySQL
mysql·docker·容器
Kismet_nvi7 小时前
《Kubernetes Service 进阶、kube-proxy 与 Ingress 实战精要》
云原生·容器·kubernetes
Crazy________9 小时前
Redis03:持久化存储,大key分析,主从复制及哨兵模式
数据库·redis·容器
Zhu7589 小时前
使用helm在k8s集群部署MySQL单实例,支持当前所有主版本的最新子版本
mysql·adb·kubernetes
2401_8346369910 小时前
从零吃透 K8s 网络:ServiceIngressMetalLB 实操手册
网络·容器·kubernetes
SLD_Allen11 小时前
HxApisix 云原生 API 网关的架构设计与 AI 集成实践(THS)
人工智能·网关·云原生·apisix
云烟成雨TD12 小时前
Micrometer 系列【39】链路追踪:入门案例 | 环境准备
java·云原生·链路追踪