主机 nginx一般 nginx 做主机反向代理(网关)有以下配置
pod nginx-ingress1、Podnginx-ingress pod有两个功能,controller 和 nginx: controller:和kubernetes api通讯实时更新nginx配置(就是ingress yaml资源了)nginx:正常的反向代理 与主机nginx的区别是,该pod nginx-ingress是运行在pod里。主机在定义反向代理配置文件时,需要监听一个对外开放的端口,比如上边的80端口。那么pod中的nginx端口是如何配置的呢? https://raw./kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml 其中一段 apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-ingress-controller namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginxspec: replicas: 1 selector: matchLabels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx template: metadata: labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx annotations: prometheus.io/port: '10254' prometheus.io/scrape: 'true' spec: # wait up to five minutes for the drain of connections terminationGracePeriodSeconds: 300 serviceAccountName: nginx-ingress-serviceaccount containers: - name: nginx-ingress-controller image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1 ... ... ... ports: - name: http containerPort: 80 - name: https containerPort: 443 我们看到 - name: http containerPort: 80- name: https containerPort: 443 默认对外监听了两个端口80和443,也就是说,有这两个端口对外就可以web服务了。 2、ingress 资源ingress 资源通过yaml进行管理的,比如以下: apiVersion: extensions/v1beta1kind: Ingressmetadata: name: orderspec: rules: - host: order.example.com http: paths: / backend: serviceName: order servicePort: 80
当然ingress如果包含https,那么会转化nginx对应的443端口及证书的配置文件内容,这里就不写了。 那么,单一个规则的ingress资源代理多个服务(比如order服务,product服务)或者多个ingress资源文件如何转化为nginx配置? 猜测,其实就是转化成了多个。 upstream order{ server order:80; } 当然,被转化的nginx配置文件要比这些复杂的多,据说还是用lua脚本写的,灵活如openresty。 3、nginx-ingress对外提供服务
4、nginx-ingress工作流程我们可以看到,因为 nginx-ingress 这个pod做了所有service的代理,在高并发情况下将承受巨大压力,我们可以增加多个pod实例。 作者:dakesolo
链接:https:///post/6844903957479817230 |
|