【问题标题】:K8S Ingress 404 ssl backendK8S Ingress 404 ssl 后端
【发布时间】:2020-11-06 01:38:42
【问题描述】:

我有一个无法解决的问题。我已经在我的托管 k8s 集群上设置了 Nginx Ingress Controller。我试图到达后面启用 SSL 的 pod,但它不起作用。我从 Nginx 找不到 404,并且提供的证书是 Nginx 证书。我已经使用他们的 github repo 和他们的文档后面的默认文件部署了控制器。 我已经为目的测试设置了一个清晰的 http pod,它可以工作。它似乎与ssl有关。 我尝试了很多事情都无济于事。如何访问 nginx 后面的 SSL pod?

这是我设置的部署 + 服务(用于 https 之一)资源:

apiVersion: apps/v1
kind: Deployment 
metadata:
 name: moulip-https
spec:
 selector:
   matchLabels:
     app: moulip-https
replicas: 2
template:
 metadata:
  labels:
    app: moulip-https
spec:
  containers:
  - name: "wabam" 
    image: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    ports:
    - containerPort: 443
  imagePullSecrets:
  - name: regcrd
---      
apiVersion: v1
kind: Service
metadata:
 name: https-svc
 labels:
   app: moulip-https
spec:
  ports:
  - port: 443
    targetPort: 443
    protocol: TCP
    name: https
selector:
  app: moulip-https

和我的入口:

apiVersion: extensions/v1beta1 
kind: Ingress
metadata:
  name: ingress
  annotations:
   nginx.ingress.kubernetes.io/secure-backends: "true"
   nginx.ingress.kubernetes.io/ssl-passthrough: "true"
   nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
   nginx.ingress.kubernetes.io/rewrite-target: /
namespace: default
spec:
 rules:
  - host: https.moulip.lan
    http:
     paths:
      - backend:
          serviceName: https-svc
          servicePort: 443
  - host: test.moulip.lan
    http:
     paths:
      - backend:
          serviceName: hostname-svc
          servicePort: 80

非常感谢您为我提供的任何指导。

【问题讨论】:

  • 来自 nginx 入口控制器 pod 的错误日志

标签: nginx ssl kubernetes


【解决方案1】:

您在入口中缺少 tls 配置。按照下面的示例进行操作

apiVersion: v1
kind: Secret
metadata:
  name: testsecret-tls
  namespace: default
data:
  tls.crt: base64 encoded cert
  tls.key: base64 encoded key
type: kubernetes.io/tls
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: tls-example-ingress
spec:
  tls:
  - hosts:
      - sslexample.foo.com
    secretName: testsecret-tls
  rules:
  - host: sslexample.foo.com
    http:
      paths:
      - path: /
        backend:
          serviceName: service1
          servicePort: 80

【讨论】:

  • 您好,首先感谢您的回答。这可以工作,但在我的情况下 servicePort 是 443,因为它不接受清除 http 对话框。 K8s 是否能够出示证书然后通过 https 连接到后端?
  • 您需要 ssl 证书才能获得 https 工作。考虑来自letsencrypt.org的免费tls证书
  • 是的,我知道我必须获得证书。我的问题是关于启用 ssl 的后端(在您的示例中为服务 1)。我不知道当 k8s/nginx 自己“终止”ssl 连接时,它是否能够通过 https 连接到后端。
  • 关注另一个线程的答案。它可能会有所帮助,但您仍然需要 tls 证书来实现这一点。 stackoverflow.com/questions/54459015/…
  • 确实如此。非常感谢您的时间。我会检查这个链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 2019-06-13
  • 2021-12-14
  • 2021-11-22
  • 1970-01-01
  • 2019-07-29
  • 2019-03-24
相关资源
最近更新 更多