ssl - 在 GCE/GKE 上启用 HTTPS

标签 ssl kubernetes google-cloud-platform load-balancing

我在 Google Cloud 上使用 Kubernetes 运行网站。目前,一切运行良好——通过 http。但我需要https。我有几个服务,其中一个是暴露在外面的世界,我们称之为网络。据我所知,这是唯一需要修改的服务。我尝试在 GCP 的网络部分创建静态 IP 和 TCP/SSL 负载均衡器 ssl-LB,并在我创建的 web.yaml 中使用该 LB。创建服务陷入困境:

Error creating load balancer (will retry): Failed to create load 
balancer for service default/web: requested ip <IP> is 
neither static nor assigned to LB
aff3a4e1f487f11e787cc42010a84016(default/web): <nil>

但是,根据 GCP,我的 IP 是静态的。我在任何地方都找不到散列 LB,无论如何都应该将其分配给 ssl-LB。我该如何正确分配它?

更多详情:

这里是web.yaml的内容

apiVersion: v1
kind: Service
metadata:
name: web
labels:
  ...
spec:
  type: LoadBalancer
  loadBalancerIP: <RESERVED STATIC IP> 
ports:
- port: 443
  targetPort: 7770
selector:
  ...
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 1
  template:
    metadata:
      labels:
        ...
  spec:
    containers:
    - name: web
      image: gcr.io/<PROJECT>/<IMAGE NAME>
      ports:
      - containerPort: 7770

最佳答案

由于您还没有提到这一点,我只是假设您正在使用 Google Container Engine (GKE) 进行 Kubernetes 设置。

在服务资源 list 中,如果设置 Type to LoadBalancer , Kubernetes on GKE 使用GCE自动设置网络负载均衡(L4 Load balancer)。您将不得不使用您自己的自定义服务器或类似 nginx/apache 的东西来终止您的 pod 中的连接。

如果您的目标是设置 (HTTP/HTTPS) L7 负载均衡器(看起来是这样),使用 Ingress resource in Kubernetes 会更简单、更容易。 (从 v1.1 开始)。 GKE 使用此设置自动设置 GCE HTTP/HTTPS L7 负载平衡。

您将能够添加您的 TLS 证书,这些证书将由 GKE 自动在 GCE 负载均衡器上配置。

此设置具有以下优点:

  1. 指定每个 URL 路径和端口的服务(它使用来自 GCE 的 URL Maps 来配置它)。
  2. 在 GCE 负载均衡器上设置和终止 SSL/TLS(它使用 GCE 的 Target proxies 来配置它)。
  3. GKE 也会自动配置 GCE health checks为您服务。

您的职责是处理后端服务逻辑以处理您的 pod 中的请求。

有关 GKE page about setting up HTTP load balancing 的更多信息.

请记住,在使用 GKE 时,它会自动为上述两种用例使用可用的 GCE 负载均衡器支持,您无需手动设置 GCE load balancing .

关于ssl - 在 GCE/GKE 上启用 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44365921/

相关文章:

kubernetes - 使用Let's Encrypt和Ingress设置kubernetes-Gnutls_handshake()失败:接收到意外的TLS数据包

android - 如何在 Android 上使用 google 服务帐户获取 OAuth 2.0 访问 token

PHP FPM 终止 Cloud Run 中的每个请求

java - trustAnchors 参数必须非空

python - 请求无法连接到 TLS 服务器

Maven Tomcat 插件上的 SSL 配置

javascript - Sails.JS HTTP + HTTPS

kubernetes - Ansible 无法处理 kubectl 代理命令

kubernetes - 如何为 kubernetes Pod env 变量应用 patch/put rest api

node.js - 一个实例 - 一次一个请求 App Engine 灵活