访问 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
最新推荐文章于 2025-07-30 00:36:53 发布
博客围绕访问https://www.sh.smartedu.cn/scps/bus/status时X-Forwarded-Port配置问题展开。上游消息标头端口有误,ingress配置不生效,原因可能是代理类型问题。通过在node节点新部署nginx做代理,重新安装master节点的ingress并新建websocket假域名的ingress,解决端口冲突,最终使端口配置正确。

3856

被折叠的 条评论
为什么被折叠?



