首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Google Kubernetes Engine中配置nginx部署,将流量传递到前端部署?

如何在Google Kubernetes Engine中配置nginx部署,将流量传递到前端部署?
EN

Stack Overflow用户
提问于 2020-02-10 11:04:25
回答 2查看 230关注 0票数 2

GKE和kubernetes的新手只是尝试启动和运行一个简单的项目。以下是我在GKE中试图在单个集群、单节点池和单个名称空间中实现的目标:

LoadBalancer服务后面的nginx部署接受端口80上的Http流量,将其通过端口8000传递到

ClusterIP服务后面的前端部署(python Django)接受端口8000上的流量。

前端已经成功地与运行Postgres数据库的StatefulSet进行了通信。在我把它的服务从LoadBalancer切换到ClusterIP之前,我们看到这个前端成功地服务于Http (gunicorn)。

我不知道如何正确设置Nginx配置,以便将流量传递到ClusterIP服务以进行前端部署。我有的是不起作用的。

如有任何建议或建议,我们将不胜感激。以下是设置文件:

nginx - etc/nginx/conf.d/nginx.conf

代码语言:javascript
复制
upstream front-end {
    server front-end:8000;
}

server {

    listen 80;
    client_max_body_size 2M;

    location / {
        proxy_pass http://front-end;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /static/ {
        alias /usr/src/app/static/;
    }

}

nginx部署/服务

代码语言:javascript
复制
---
apiVersion: v1
kind: Service
metadata:
  name: "web-nginx"
  labels:
    app: "nginx"
spec:
  type: "LoadBalancer"
  ports:
  - port: 80
    name: "web"
  selector:
    app: "nginx"
---
apiVersion: "apps/v1"
kind: "Deployment"
metadata:
  name: "nginx"
  namespace: "default"
  labels:
    app: "nginx"
spec:
  replicas: 1
  selector:
    matchLabels:
      app: "nginx"
  template:
    metadata:
      labels:
        app: "nginx"
    spec:
      containers:
      - name: "my-nginx"
        image: "us.gcr.io/my_repo/my_nginx_image"  # this is nginx:alpine + my staicfiles & nginx.conf
        ports:
        - containerPort: 80
        args:
        - /bin/sh 
        - -c
        - while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g "daemon off;"

前端部署/服务

代码语言:javascript
复制
---
apiVersion: v1
kind: Service
metadata:
  name: "front-end"
  labels:
    app: "front-end"
spec:
  type: "ClusterIP"
  ports:
  - port: 8000
    name: "django"
    targetPort: 8000
  selector:
    app: "front-end"
---
apiVersion: "apps/v1"
kind: "Deployment"
metadata:
  name: "front-end"
  namespace: "default"
  labels:
    app: "front-end"
spec:
  replicas: 1
  selector:
    matchLabels:
      app: "front-end"
  template:
    metadata:
      labels:
        app: "front-end"
    spec:
      containers:
      - name: "myApp"
        image: "us.gcr.io/my_repo/myApp"
        ports:
        - containerPort: 8000
        args:
          - /bin/sh 
          - -c
          - python manage.py migrate && gunicorn smokkr.wsgi:application --bind 0.0.0.0:8000
---
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-10 11:49:10

最好使用ingress将流量转发到Kubernetes中的服务。

你可以在这里找到更多的描述:https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes

关于Kubernetes官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/

只需在后台部署nginx控制器,应用nginx规则,将nginx deploy8,将YAML规则转换为nginx conf即可。

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test
          servicePort: 80
票数 2
EN

Stack Overflow用户

发布于 2020-02-10 20:29:08

Kubernetes ingress是解决这一问题的方法。GKE在后台使用Google负载均衡器来配置您的Kubernetes入口资源;因此,当您创建ingress对象时,GKE入口控制器会创建一个Google cloud HTTP(S)负载均衡器,并根据Ingress及其关联服务中的信息对其进行配置。

通过这种方式,您可以访问来自谷歌的一些自定义资源类型,如ManagedCertificatesstaticIP地址,它们可以与kubernetes中的入口相关联,以实现服务之间或客户端和服务之间的负载平衡。

按照此处的文档了解如何使用K8s入口- https://cloud.google.com/kubernetes-engine/docs/concepts/ingress设置GKE的负载平衡

这篇教程也非常有用-

https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60143576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档