当前位置: 首页 > 知识库问答 >
问题:

未为入口nginx后端配置SSL直通

吕高寒
2023-03-14

我正在通过helm在minikube运行nginx ingress controller,通过查看nginx ingress controller pod的日志,我可以看到控制器中启用了SSL直通。

helm upgrade ingress stable/nginx-ingress --install --namespace kube-system --set "controller.extraArgs.annotations-prefix=nginx.ingress.kubernetes.io" --set "controller.extraArgs.enable-ssl-passthrough=" --set controller.hostNetwork=true

在内部,我在19000端口上暴露了一个HTTPS REST API服务。我希望客户端和k8s内运行的服务之间有相互的TLS,所以我试图在启用SSL直通的情况下配置我的入口,但是当我在入口上将nginx.ingress.kubernetes.io/ssl-passthrough注释设置为"true"时,后端仍然显示sslPassover设置为false当我向服务发送请求时,nginx正在从我的请求中剥离TLS证书。

我是否缺少一些配置来在后端启用SSL passthrough?

$ kubectl ingress-nginx --deployment ingress-nginx-ingress-controller -n kube-system backends
[
  {
    "name": "default-tlsapi-service-19000",
    "service": {
      "metadata": {
        "creationTimestamp": null
      },
      "spec": {
        "ports": [
          {
            "protocol": "TCP",
            "port": 19000,
            "targetPort": 19000,
            "nodePort": 30000
          }
        ],
        "selector": {
          "app": "tlsapi"
        },
        "clusterIP": "10.96.218.188",
        "type": "NodePort",
        "sessionAffinity": "None",
        "externalTrafficPolicy": "Cluster"
      },
      "status": {
        "loadBalancer": {}
      }
    },
    "port": 19000,
    "sslPassthrough": false,
    "endpoints": [
      {
        "address": "172.17.0.7",
        "port": "19000"
      }
    ],
    "sessionAffinityConfig": {
      "name": "",
      "mode": "",
      "cookieSessionAffinity": {
        "name": ""
      }
    },
    "upstreamHashByConfig": {
      "upstream-hash-by-subset-size": 3
    },
    "noServer": false,
    "trafficShapingPolicy": {
      "weight": 0,
      "header": "",
      "headerValue": "",
      "cookie": ""
    }
  }

进入。亚马尔

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: tlsapi-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
  rules:
  - host: tlsapi.k8s
  - http:
      paths:
      - path: /
        backend:
          serviceName: tlsapi-service
          servicePort: 19000

服务亚马尔

apiVersion: v1
kind: Service
metadata:
  name: tlsapi-service
spec:
  type: NodePort
  selector:
    app: tlsapi
  ports:
    - port: 19000
      targetPort: 19000
      nodePort: 30000

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tlsapi-deployment
spec:
  selector:
    matchLabels:
      app: tlsapi
  replicas: 1
  template:
    metadata:
      name: tlsapi-pod
      labels:
        app: tlsapi
    spec:
      containers:
      - name: tlsapi-container
        image: tlsapi:latest
        imagePullPolicy: IfNotPresent

共有2个答案

廖君昊
2023-03-14

原来问题出在我的入口定义上。我需要删除http密钥前面的-from:

工作ingress.yaml片段

spec:
  rules:
  - host: tlsapi.k8s
    http:
      paths:
      - path: /
        backend:
          serviceName: tlsapi-service
          servicePort: 19000

不工作ingress.yaml片段

spec:
  rules:
  - host: tlsapi.k8s
  - http:
      paths:
      - path: /
        backend:
          serviceName: tlsapi-service
          servicePort: 19000

如果将yaml转换为json,则单个字符的差异会更加明显!

删除该字符后,SSL passthrough将按预期工作

堵恺
2023-03-14

您需要启动nginx入口控制器与标志--enable-ssl-Passover

您可以在nginx入口控制器部署yaml的args部分提供此标志

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:master
      args:
        - --enable-ssl-passthrough

您可以通过查看nginx入口控制器日志并搜索SSL直通的启动TLS代理来确认参数生效。

 类似资料:
  • 我有一个域名lxl.top,有两个通过docker部署在ngingx上的web前端项目log,admin, 能通过域名+端口号访问, 现在我想要通过log.lxl.top和admin.lxl.top分别访问这两个项目, 两个前缀已经在dns解析了, 在nginx配置文件中该怎么配置呢? 我的nginx配置文件如下

  • 那么... 我在端口8080的服务器上运行了一个节点应用程序,我正在尝试使用NGINX和CloudFlare使其能够通过SSL工作。请注意以下几点。。。 我的主机正在运行Ubuntu 16.04 LTS ...我以前的NGINX配置看起来像。。。 ...现在看起来。。。 ...我遵循了这里的例子和它在这里提供的链接,我怀疑上面的一切都是必需的(我是一个极简主义者)。每当我运行时,我仍然会在未指定s

  • nginx error.log日志一直报 错误,我使用pc 浏览器访问一切正常,nginx上还挂着给app访问的api接口,在app上会出现有的用户可以访问有的出问题这种情况。搜索了百度和谷歌都没找到问题所在。 https 证书是阿里云买的证书。nginx配置如下 服务器系统版本:Rocky Linux release 9.1 (Blue Onyx) nginx版本:nginx version:

  • TL;DR:我想在nginx入口控制器上通过SSL passthrough在K8s中设置基于cookie的会话关联性——可以这样做吗? 嘿所有人, 我有一个正在运行的Azure Kubernetes服务(AKS)(1.11.3),并配置了NGINX入口控制器,将请求路由到我的应用程序的ClusterIP服务(该应用程序至少运行两个pod)。 我已经成功地在入口控制器上配置了SSL直通,以便TLS在

  • 我希望以以下方式分割Kubernetes Nginx中的传入流量: 我为找到了指向example.com的路由。 此解决方案仅在service-b超过HTTPS的情况下工作,但在我的情况下,由于其他一些内部依赖关系,我无法将此服务更改为HTTPS。 我的问题是注释适用于整个类型,我不能按路径定义它。 附:我正在使用AWS提供程序

  • 我已经在服务器上安装了Nginx、PHP-FPM、SSL证书(让我们加密)和WordPress 4.6.1,并且运行良好。但是,当我将permalink设置更改为默认值以外的任何设置时,我会在每个帖子、文章和页面上得到404个错误。在我的nginx配置文件中,我的位置/块下面有以下代码: try_files$uri$uri//index.php?$args; 以下是我的nginx.conf: