访问 https://www.sh.smartedu.cn/scps/bus/status 上游传来的的消息标头,X-Forwarded-Port 80 该环境是https,所以不应该是80,应该是443,但是在ingress中配置的不生效, proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Port 443; 上游说他们没有代理,直接cdn转发过来的, 但是实际上并不是没有代理,区别就是可能不是nginx7层代理,可能是4层或者3层代理,但是学校不承认, 我们要做的就是在node节点上新部署一个nginx再做一个代理。 apt -y install nginx # 新建.conf配置文件 vim /etc/nginx/conf.d/scps.conf upstream clusertaskcenter { server 10.96.192.106:80; #ingress的svc ip } server { listen 80; server_name www.sh.smartedu.cn; # proxy_ssl_server_name on; # proxy_ssl_protocols SSLv3; # proxy_redirect off; # proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Forwarded-For $remote_addr proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Port 443; proxy_set_header Connection ""; proxy_set_header Host $host; # error_log /var/log/nginx/infoplus_error.log warn; # access_log /var/log/nginx/infoplus-ssl-access.log main; location / { proxy_pass http://10.96.192.106:80; #ingress的svc ip client_max_body_size 500M; } } # 万达的代理版本不支持websocket,所以需要再新建一个配置文件 vim /etc/nginx/conf.d/fake.conf #下面三段注释的意思是,如果同一个nginx,不通的配置文件中写了两个upstream,会导致重复,nginx服务起不来 #upstream clusertaskcenter { #server 10.96.192.106:80; #ingress的svc ip #} server { listen 80; server_name internal.ws.cn; # proxy_ssl_server_name on; # proxy_ssl_protocols SSLv3; # proxy_redirect off; # proxy_set_header X-Real-IP $remote_addr; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; # error_log /var/log/nginx/infoplus_error.log warn; # access_log /var/log/nginx/infoplus-ssl-access.log main; location / { proxy_pass http://10.96.192.106:80; } } 然后重启nginx服务 node节点上的nginx做好配置后,master节点上的ingress重新安装,并新建一个websocket假域名的ingress,因为ingress的控制器是ds 特点是每个节点都会有一个ingress的pod, 但是node1上已经有我们新安装的nginx,会导致端口冲突,并且ingress使用的还是主机网络,导致与主机的端口冲突。 # 重新安装ingress不会导致已有的ingress规则删除 helm upgrade --install nginx-ingress-controller ./nginx-ingress-controller-9.2.6.tgz -f values.yaml \ -n ingress-nginx --create-namespace \ --set ingressClassResource.default=true \ --set service.type=ClusterIP \ --set defaultBackend.enabled=false 如果node节点安装了nginx,集群中已安装的ingress就要重新安装,否则会导致端口80,443冲突 #--set kind=DaemonSet \ 每个节点都有,需要删除 #--set daemonset.useHostPort=true \ #--set hostNetwork=true \ 使用主机网络,会导致与本机端口冲突 #--set dnsPolicy=ClusterFirstWithHostNet \ 适用与以hostNetwork模式运行的pod # websocket的ingress apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/affinity: cookie nginx.ingress.kubernetes.io/proxy-body-size: 50m name: fake-internal-ingress namespace: ketanyun spec: ingressClassName: nginx rules: - host: internal.ws.cn http: paths: - backend: service: name: base-bus port: number: 80 path: /scps/bus pathType: ImplementationSpecific - backend: service: name: base-sso-v3 port: number: 80 path: /scps/sso pathType: ImplementationSpecific 然后在maker的deploy中添加 - name: WEBSOCKET_SERVER_URL value: ws://internal.ws.cn/scps/bus/graphql/builtin 然后再kubectl edit cm -n ingress-nginx nginx-ingress-controller use-forwarded-headers: "true" 再次访问 https://www.sh.smartedu.cn/scps/bus/status 就会得到 X-Forwarded-Port 443;
X-Forwarded
最新推荐文章于 2024-01-30 17:03:27 发布