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
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
---发布于 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即可。
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发布于 2020-02-10 20:29:08
Kubernetes ingress是解决这一问题的方法。GKE在后台使用Google负载均衡器来配置您的Kubernetes入口资源;因此,当您创建ingress对象时,GKE入口控制器会创建一个Google cloud HTTP(S)负载均衡器,并根据Ingress及其关联服务中的信息对其进行配置。
通过这种方式,您可以访问来自谷歌的一些自定义资源类型,如ManagedCertificates和staticIP地址,它们可以与kubernetes中的入口相关联,以实现服务之间或客户端和服务之间的负载平衡。
按照此处的文档了解如何使用K8s入口- https://cloud.google.com/kubernetes-engine/docs/concepts/ingress设置GKE的负载平衡
这篇教程也非常有用-
https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer
https://stackoverflow.com/questions/60143576
复制相似问题