【问题标题】:Kubernetes: add NGINX webserverKubernetes:添加 NGINX 网络服务器
【发布时间】:2018-09-21 11:38:43
【问题描述】:

我设法用 minikube 创建和部署了一个 k8s 集群,运行了一个简单的 hello-world node.js 应用程序的 4 个副本,使用以下配置。

应用程序的 Dockerfile:

FROM ubuntu:latest

RUN apt-get update
RUN apt-get -qq update
RUN apt-get install -y nodejs npm
# TODO could uninstall some build dependencies

# debian installs `node` as `nodejs`
RUN update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10

COPY package.json package.json

RUN npm install

COPY . .

CMD ["node", "app.js"]

k8s 部署 yml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-deployment
  labels:
    app: node-app
spec:
  replicas: 4
  selector:
    matchLabels:
      app: node-app
  template:
    metadata:
      labels:
        app: node-app
    spec:
      containers:
      - name: node-app
        image: my-repo/ubuntu-node:sectry 
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: node-service
  labels:
    app: node-app
spec:
  type: NodePort
  ports:
  - port: 3000
    protocol: TCP
  selector:
    app: node-app

我的问题是如何为它添加一个 nginx 容器?我知道 k8s 集群已经进行了负载均衡,但我真的很想使用 NGINX 功能。

【问题讨论】:

  • 查看此tutorial 以通过仪表板获取它。仅部署 NGINX 不需要深入了解 Kubernetes 的配置。

标签: nginx kubernetes minikube


【解决方案1】:

我猜你想使用 nginx 作为你的 Node.js 应用程序的反向代理。如果是这种情况,您可以使用以下方法之一来实现它。

选项 1

  1. 将 nginx 和您的 node.js 应用程序构建到一个 Docker 映像中。在此图中,将 nginx 配置为反向代理并将请求转发到您的 node.js 应用程序。例如,下面的 nginx 配置将请求转发到同一个容器中的 3000 端口。

    server {
        listen      80;
        server_name localhost;
    
        location / {
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass  http://127.0.0.1:3000;
        }
    }
    
  2. 然后您可以将此镜像部署到 k8s 集群,并为其创建服务。

选项 2

  1. 创建 2 个 docker 映像:1 个用于 nginx,1 个用于您的 node.js。
  2. 将它们都部署到 k8s 并为它们各自创建一个服务。使用ClusterIP作为node.js镜像的服务类型,LoadBalancer作为nginx镜像。
  3. 配置nginx为反向代理,将请求转发到node.js镜像服务对应的集群ip。

要在 minikube 上进行测试,选项 1 更容易。建议将选项 2 用于生产 k8s 集群。

【讨论】:

【解决方案2】:

我会添加第三个选项:使用 Ingress Controller https://github.com/nginxinc/kubernetes-ingress

它将创建您正在寻找并内置在 K8s 上的所有这些功能。

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 2011-02-01
    • 2020-05-24
    • 2011-04-07
    • 2018-02-07
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多