【问题标题】:Kubernetes nginx ingress shows "403" after configuring path field配置路径字段后,Kubernetes nginx 入口显示“403”
【发布时间】:2020-08-13 02:25:46
【问题描述】:

以下是我的清单:

  • service.yaml
apiVersion: v1
kind: Service
metadata:
  name: jenkins
spec:
  type: NodePort
  ports:
   - port: 8080
     protocol: TCP
     targetPort: 8080
     nodePort: 80
  selector:
    app: jenkins
  #externalTrafficPolicy: "Cluster"
  • ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress-entry
  annotations:
    kubernetes.io/ingress.class: "nginx"
    #nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
    #ingress.bluemix.net/rewrite-path: "serviceName=jenkins rewrite=/"

spec:
  tls:
  - hosts:
    - ingress.hygon.cn
    secretName: nginx-cert
  rules:
  - host: ingress.hygon.cn
    http:
      paths:
      - path: /jenkins
        backend:
          serviceName: jenkins
          servicePort: 8080

我使用 nginx 入口来控制访问后端服务 Jenkins。 如果我设置 http.paths.path 等于 "/" 一切正常,但如果我为 URL 设置路径字段,浏览器将显示 403 错误。

【问题讨论】:

  • 您在这里使用nodePort 有什么具体原因吗?简单的ClusterIP 服务就足够了。只需删除 type: NodePortnodePort: 80 字段。很可能您无论如何都无法在节点 IP 的端口 80 上公开它,除非您使用 --service-node-port-range portRange 标志启动 kube-apiserver 并指定不同的端口范围,例如类似1-1024

标签: nginx kubernetes kubernetes-ingress nginx-ingress


【解决方案1】:

您没有指定从外部访问的 URL。但我猜你打的是http.paths.path: /

http://hosname/jenkins

然后您将其修改为 http.paths.path: /jenkins,并点击相同的 URL,您将获得 403。如果是这种情况,您需要删除 nginx.ingress.kubernetes.io/rewrite-target: /,因为这实际上是将 /jenkins 重写为 /,并且您的 Jenkins 服务器不知道如何为它提供服务。

或者,您可以将 Jenkins 服务器上的配置更改为在 / 下服务,并使用 http.paths.path: /jenkinsnginx.ingress.kubernetes.io/rewrite-target: / 保持当前设置。

✌️

【讨论】:

  • 我的目的是我可以通过输入“hostname/jenkins”来访问后端的jenkins服务器,就像nginx反向代理一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 2021-05-23
  • 2020-02-27
  • 1970-01-01
  • 2020-12-30
相关资源
最近更新 更多