X-Forwarded

访问 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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值