Kubernetes Ingress(K8s Ingress)是一种用于管理和公开Kubernetes集群中服务的API对象。它允许外部流量进入集群,并提供路由规则来决定如何将该流量路由到不同的服务.
Ingress Controller:Ingress并不直接处理请求,而是通过Ingress Controller实现。Ingress Controller是一个运行在Kubernetes集群中的服务,它负责监视新的Ingress对象的创建和更新,并根据定义的规则配置负载均衡器(通常是反向代理)。常见的Ingress Controllers包括Nginx Ingress Controller、Traefik、HAProxy Ingress等。k8s目前支持和维护 AWS、 GCE 和 Nginx Ingress 控制器。
Ingress Resource:Ingress资源是定义路由规则的Kubernetes对象。它包含了定义请求如何路由的规则,包括主机名、路径、后端服务等。
所有示例基于Nginx Ingress Controller,所以需要先部署Nginx Ingress Controller
# 下载 ingress-nginx.yaml,这个需要连接github,不过我在资料包中已经为大家准备好了。
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml
# 修改镜像为国内地址
image: k8s.gcr.io/ingress-nginx/controller:v1.2.0@sha256:d8196e3bc1e72547c5dec66d6556c0ff92a23f6d0919b206be170bc90d5f9185
替换成
image: docker.io/dyrnq/controller:v1.2.0@sha256:d8196e3bc1e72547c5dec66d6556c0ff92a23f6d0919b206be170bc90d5f9185
image: k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
替换成
image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
# 修改serviceType
LoadBalancer -> NodePort
# 修改hostNetwork 使用主机网络 kind为 DaemonSet
apiVersion: apps/v1
# kind: Deployment
kind: DaemonSet
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
template:
spec:
hostNetwork: true
# 安装ingress-nginx-controller
kubectl apply -f ingress-nginx.yaml
安装在了node1,node2节点中,并且使用主机网络IP,监听80和43端口
访问后,出现了nginx,代表安装成功
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-simple
annotations:
kubernetes.io/ingress.class: "nginx"
#nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: "ingress.lglbc.cn"
http:
paths:
- pathType: Prefix
path: "/api"
backend:
service:
name: clusterip-service
port:
number: 80
需要现在容器内容创建两个文件夹
mkdir /usr/share/nginx/html/api2
mkdir /usr/share/nginx/html/api
echo hello > /usr/share/nginx/html/api/index.html
echo hello ingress2 > /usr/share/nginx/html/api2/index.html
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-more-host
annotations:
kubernetes.io/ingress.class: "nginx"
#nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: "ingress3.lglbc.cn"
http:
paths:
- pathType: Prefix
path: "/api"
backend:
service:
name: clusterip-service
port:
number: 80
- host: "ingress2.lglbc.cn"
http:
paths:
- pathType: Prefix
path: "/api2"
backend:
service:
name: clusterip-service
port:
number: 80