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/
相关推荐
007php00743 分钟前
百度面试题解析:微服务架构、Dubbo、Redis及其一致性问题(一)
redis·百度·docker·微服务·容器·职场和发展·架构
東雪蓮☆1 小时前
K8s 平滑升级
linux·运维·云原生·kubernetes
我狸才不是赔钱货4 小时前
容器:软件世界的标准集装箱
linux·运维·c++·docker·容器
三坛海会大神5556 小时前
k8s(十)Helm详解
云原生·容器·kubernetes
安卓开发者6 小时前
Docker命令大全:从入门到精通
docker·容器·eureka
K_i1347 小时前
Kubernetes流量管理:从Ingress到GatewayAPI演进
云原生·容器·kubernetes
蓝色土耳其love8 小时前
centos 7.9 安装单机版k8s
linux·运维·服务器·kubernetes·centos
七度光阴;9 小时前
Docker入门手册
运维·docker·容器
007php00711 小时前
百度面试题解析:Zookeeper、ArrayList、生产者消费者模型及多线程(二)
java·分布式·zookeeper·云原生·职场和发展·eureka·java-zookeeper
weixin_4050233711 小时前
使用docker 安装部署easy-mock
运维·docker·容器