### K8s Ingress部署及使用流程
下面是实现k8s Ingress的部署及使用的步骤概述:
| 步骤 | 描述 |
| ---- | ----- |
| 第一步 | 创建Ingress Controller |
| 第二步 | 配置Ingress规则 |
| 第三步 | 部署应用服务 |
| 第四步 | 将域名解析指向集群 |
| 第五步 | 验证 Ingress 功能 |
下面我们逐步讲解每个步骤需要做什么,并提供相关的代码示例。
### 第一步:创建Ingress Controller
Ingress Controller是Ingress资源的实际运行者,负责处理所有的外部流量并将其路由到集群内的相应的服务。以下是创建Ingress Controller的步骤:
1. 创建Ingress Controller的Deployment:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
replicas: 1
selector:
matchLabels:
app: ingress-nginx-controller
template:
metadata:
labels:
app: ingress-nginx-controller
spec:
containers:
- name: ingress-nginx-controller
image: k8s.gcr.io/ingress-nginx/controller:v0.45.0
args:
- /nginx-ingress-controller
- --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
- --election-id=ingress-controller-leader
- --ingress-class=nginx
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
```
上面的示例中,我们创建了一个名称为ingress-nginx-controller的Deployment,使用了来自k8s.gcr.io的ingress-nginx/controller的镜像。在模板中,我们指定了容器的一些参数,如--publish-service用于发布Service供外部访问。
2. 创建Ingress Controller的Service:
```yaml
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 443
selector:
app: ingress-nginx-controller
```
上面的示例中,我们创建了一个名称为ingress-nginx-controller的Service,提供了80和443端口的访问。
3. 应用配置文件:
```shell
$ kubectl apply -f ingress-controller.yaml
```
### 第二步:配置Ingress规则
配置Ingress规则是指定义Ingress资源对象,用于指定外部请求的路由规则。以下是一个简单的Ingress规则的示例:
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /app1
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 8080
- path: /app2
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 8080
```
上面的示例中,我们创建了一个名称为example-ingress的Ingress对象,配置了两条路由规则。当外部请求的Host为example.com时,根据请求的URL路径,负载均衡到名为app1-service和app2-service的两个Service上,它们的端口分别为8080。
应用配置文件:
```shell
$ kubectl apply -f ingress-rule.yaml
```
### 第三步:部署应用服务
在配置完Ingress规则后,我们需要部署相应的应用服务。
以app1-service为例,我们可以创建一个Deployment和Service定义文件:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app1-deployment
spec:
replicas: 3
selector:
matchLabels:
app: app1-service
template:
metadata:
labels:
app: app1-service
spec:
containers:
- name: app1
image: app1:v1
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: app1-service
spec:
selector:
app: app1-service
ports:
- name: http
port: 8080
```
应用配置文件:
```shell
$ kubectl apply -f app1.yaml
```
### 第四步:将域名解析指向集群
为了使Ingress规则生效,我们需要将域名解析指向集群的IP地址。
### 第五步:验证 Ingress 功能
通过访问配置的Ingress域名,可以验证Ingress是否能够将流量正确路由到后端的应用服务。
现在你已经了解了k8s Ingress的部署及使用流程,可以根据这些步骤进行实践。希望本文的指导对你的学习有所帮助!