一文读懂Ingress-Nginx以及实践攻略
在 Kubernetes 集群中,Ingress 是一种 API 资源,用于管理外部用户如何访问集群内部的服务。而 Ingress-Nginx 则是 Kubernetes 社区维护的一个 Nginx Ingress 控制器,它可以根据定义的 Ingress 资源配置 Nginx,以便路由外部请求。
一、Ingress-Nginx 的基本概念
- Ingress 资源:用于定义路由规则,指定将外部请求路由到集群内部的服务。
- Ingress 控制器:负责监听 Ingress 资源的变化,并根据这些变化生成相应的 Nginx 配置。
二、Ingress-Nginx 的安装
在 Kubernetes 集群中安装 Ingress-Nginx,可以通过 Helm 或者直接应用 YAML 文件。下面是使用 kubectl 进行安装的示例:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
这个命令会在你的集群中部署 Ingress-Nginx 控制器及其所需的资源。
三、创建一个示例应用
假设我们有一个简单的 Node.js 应用,代码如下:
const express = require('express');
const app = express();
const PORT = 8080;
app.get('/', (req, res) => {
res.send('Hello from Node.js app!');
});
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
将这个应用打包成 Docker 镜像,并上传到 Docker Hub。下面是 Dockerfile 的示例:
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "app.js"]
然后构建并推送镜像:
docker build -t your-dockerhub-username/node-app .
docker push your-dockerhub-username/node-app
四、部署应用和创建服务
首先,我们需要在 Kubernetes 中部署这个 Node.js 应用:
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-app
spec:
replicas: 2
selector:
matchLabels:
app: node-app
template:
metadata:
labels:
app: node-app
spec:
containers:
- name: node-app
image: your-dockerhub-username/node-app
ports:
- containerPort: 8080
然后,我们再创建一个 Service 使得这个应用可以被访问:
apiVersion: v1
kind: Service
metadata:
name: node-app
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8080
selector:
app: node-app
五、配置 Ingress 资源
现在,我们已经有了 Node.js 应用和 Kubernetes 服务,接下来就需要创建 Ingress 资源以暴露这个服务。以下是一个简单的 Ingress 配置示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: node-app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: your-domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: node-app
port:
number: 80
六、验证配置
应用上述配置后,使用以下命令查看你的 Ingress 资源是否创建成功:
kubectl get ingress
通过 DNS 或者修改你的本地 hosts 文件,将 your-domain.com
指向 Ingress-Nginx 控制器的外部 IP。然后在浏览器中访问 http://your-domain.com
,你应该会看到 "Hello from Node.js app!" 的响应。
总结
Ingress-Nginx 是 Kubernetes 中强大的流量管理工具,可以轻松路由外部请求。通过本文的示例,读者应该能够理解 Ingress-Nginx 的基本概念,并快速上手进行配置和部署。接下来,可以根据具体需求进行更复杂的路由和负载均衡配置。