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

nszi6y05  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(109)

我刚接触GKE和kubernetes,只是想让一个简单的项目启动并运行。下面是我在GKE中在单个集群、单个节点池和单个名称空间中尝试完成的工作:
LoadBalancer服务后面的nginx部署接受端口80上的Http流量,并将其通过端口8000传递到
前端部署(python Django)在ClusterIP服务之后,接受端口8000上的流量。
前端已成功与运行Postgres数据库的StatefulSet通信。在我将其服务从LoadBalancer切换到ClusterIP之前,看到前端成功为Http(gunicorn)提供服务。
我不知道如何正确设置Nginx配置以将流量传递到前端部署的ClusterIP服务。我所拥有的配置不起作用。
如有任何意见/建议,我们将不胜感激。以下是安装文件:
nginx -等/nginx/配置文件d/nginx配置文件

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部署/服务

---
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;"

前端部署/服务

---
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
---
rsl1atfo

rsl1atfo1#

最好使用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规则,它部署8 nginx并将YAML规则转换为nginx conf。

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
olmpazwi

olmpazwi2#

Kubernetes入口是解决这个问题的方法,GKE在后台使用Google云负载平衡器来提供Kubernetes入口资源;因此,当您创建一个入口对象时,GKE入口控制器创建一个Google Cloud HTTP(S)负载均衡器,并根据入口及其相关服务中的信息配置它。
通过这种方式,您可以从Google访问一些自定义资源类型,如ManagedCertificatesstaticIP地址,这些资源可以与kubernetes中的入口相关联,以实现服务之间或客户端与服务之间的负载平衡。
按照这里的文档来了解如何使用K8singress-https://cloud.google.com/kubernetes-engine/docs/concepts/ingress设置HTTP负载平衡
这个教程也很有帮助-
https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer

相关问题