k8s从入门到放弃之Ingress七层负载
在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可以配置HTTP和HTTPS路由规则,将流量引导到不同的服务。
Ingress的概念和功能:
- Ingress资源:这是用户定义的对象,描述了从外部访问集群内服务的规则。例如,它可以指定根据域名或路径来路由请求。
- Ingress控制器:这是一个实际执行Ingress资源中定义规则的组件。常见的Ingress控制器包括Nginx Ingress Controller、Traefik、HAProxy等。Ingress控制器监控Ingress资源的变化,并相应地配置其代理服务器。
应用场景
- 多服务管理:可以通过一个入口点管理多个服务的访问。
- 基于域名的路由:在同一个集群中运行多个应用,使用不同的域名访问。
- 基于路径的路由:根据URL路径将流量路由到不同的服务
- SSL终止:可以在Ingress上配置SSL证书,为HTTPS流量提供加密。
- 负载均衡:实现对多实例服务的负载均衡。
http案例
资源文档: kubectl explain ingress
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-nginx
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.20.0
resources:
limits:
cpu: "100m"
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ing
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: nginx.com.cn
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-svc
port:
number: 80
https案例
资源文档kubernetes explain ingress
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-nginx
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.20.0
resources:
limits:
cpu: "100m"
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ing
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- https-nginx.com.cn
secretName: secret-tls
rules:
- host: nginx.com.cn
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-svc
port:
number: 80