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

Kubernetes入口不能使用HTTPS/SSL

赫连黎昕
2023-03-14

我在Kubernetes集群中安装了Kubernetes NGINX入口

我在AWS EC2实例上部署了所有内容,经典负载均衡器位于入口控制器的前面。我可以用http端口访问服务,但不能用HTTPS访问它。

我从godaddy购买了一个有效的域,并从证书管理器获得了AWS SSL证书

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  annotations:
    # Enable PROXY protocol
    service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"
    # Ensure the ELB idle timeout is less than nginx keep-alive timeout. By default,
    # NGINX keep-alive is set to 75s. If using WebSockets, the value will need to be
    # increased to '3600' to avoid any potential issues.
    service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "60"
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:us-east-2:297483230626:certificate/ffe5a2b3-ceff-4ef2-bf13-8da5b4212121"
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http

spec:
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: practice-ingress
  namespace: practice
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
  rules:
  - host: kdhut.com
    http:
      paths:
      - backend:
          serviceName: customer-service
          servicePort: 9090
        path: /customer
      - backend:
          serviceName: prac-service
          servicePort: 8000
        path: /prac

curl -v https://kdhut.com -H 'Host: kdhut.com'

* Rebuilt URL to: https://kdhut.com/
*   Trying 3.12.176.17...
* TCP_NODELAY set
* Connected to kdhut.com (3.12.176.17) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: CN=kdhut.com
*  start date: Mar 20 00:00:00 2020 GMT
*  expire date: Apr 20 12:00:00 2021 GMT
*  subjectAltName: host "kdhut.com" matched cert's "kdhut.com"
*  issuer: C=US; O=Amazon; OU=Server CA 1B; CN=Amazon
*  SSL certificate verify ok.
> GET / HTTP/1.1
> Host: kdhut.com
> User-Agent: curl/7.58.0
> Accept: */*

共有1个答案

廉志强
2023-03-14

我认为这是AWS负载平衡器的一个问题。有一段时间,我在AWS NLB上遇到了一些东西,并找到了这个“变通方法/黑客”的链接:

变通办法

HTH

 类似资料:
  • 我在W10DockerHub20.10.2和嵌入式kubernetes集群上使用。我已经安装了ingress-nginx控制器,没有任何额外的配置。然后在我的命名空间中创建了一个入口服务,遵循下面的YAML。端口在入口是443,但在服务和部署中也是如此,因为docker映像正在监听443。 [编辑]参见下面的问题也在HTTP侦听端口4000中 预算-Ingress.yaml 预算-service.

  • 具有TLS配置的典型入口如下所示: 发现GLBC正在讨论为GCE入口启用HTTPS后端。文件摘录: 后端HTTPS 对于负载均衡器和Kubernetes服务之间的加密通信,您需要将服务的端口装饰为预期的HTTPS。有一个alpha服务注释用于指定每个服务端口的预期协议。当将协议视为HTTPS时,入口控制器将使用带有HTTPS健康检查的HTTPS后端服务组装GCP L7负载均衡器。“ 不清楚负载均衡

  • 我在Google云平台上创建了一个kubernetes集群,之后,我在集群上安装了helm/Tiller,之后,我安装了带有helm的traefik,就像官方文档所说的那样。 现在我试图为服务创建一个入口,但是如果我将注释,则不会创建入口的负载均衡器。但是如果没有注释,它将使用默认入口。(服务类型为nodeport) 编辑:我还在一个干净的google cloud kubernetes集群中尝试了

  • 我正在尝试部署一个Docker容器,它公开了一个简单的Docker服务器,它是Google容器引擎(库伯内特斯)中httpbin.org服务的克隆。 这是我正在使用的服务定义: 入口定义为: 在服务/入口仪表板中,我可以看到两个IP,一个直接绑定到服务(临时),另一个静态IP绑定到入口。直接在80号端口给他们两个打电话很有魅力。 完成后,我为静态IP创建了一个A记录,并确保GKE仪表板中的负载平衡

  • 我正在运行一个kubernetes集群,它由三个节点组成,工作出色,但现在是时候让我的Web应用程序安全了,所以我部署了一个入口控制器(traefik)。但是我找不到在上面设置https的说明。我知道我必须做的大部分事情,比如设置“秘密”(带有证书的容器)等,但我想知道如何配置我的入口控制器和与之相关的所有文件,以便我能够使用安全连接 我已经配置了入口控制器,并创建了一些前端和后端。此外,我还配置

  • 任何关于直接远程访问(不使用ssh->kubectl代理来避免在Kubernetes节点上进行用户管理)的详细实用指南都将不胜感激。:) 更新: 只是想说清楚点。这是在前提部署中的裸机(没有GCE、AWZ、Azure或任何其他),而且有些环境将完全脱机(这将增加获得安装包的额外问题)。 因此,当我在Kubernetes上设置入口时,我无法创建将443重定向到6443的防火墙规则。似乎唯一的选择是创