一文读懂Ingress-Nginx以及实践攻略

在 Kubernetes 集群中,Ingress 是一种 API 资源,用于管理外部用户如何访问集群内部的服务。而 Ingress-Nginx 则是 Kubernetes 社区维护的一个 Nginx Ingress 控制器,它可以根据定义的 Ingress 资源配置 Nginx,以便路由外部请求。

一、Ingress-Nginx 的基本概念

  1. Ingress 资源:用于定义路由规则,指定将外部请求路由到集群内部的服务。
  2. 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 的基本概念,并快速上手进行配置和部署。接下来,可以根据具体需求进行更复杂的路由和负载均衡配置。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部