如何在kubernetes应用程序上获取ssl?

fay*_*fay 13 security ssl https kubernetes google-kubernetes-engine

我在kubernetes上部署了一个简单的流星应用程序.我将外部IP地址与服务器相关联,以便可以从群集中访问它.现在,我准备将它暴露给互联网并保护它(使用HTTPS协议).任何人都可以给出本节的简单说明吗?

Jan*_*art 15

在我看来,kube-lego是GKE的最佳解决方案.看看原因:

配置示例(就是这样!):

kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-lego
  namespace: kube-lego
data:
  lego.email: "your@email"
  lego.url: "https://acme-v01.api.letsencrypt.org/directory"
Run Code Online (Sandbox Code Playgroud)

示例Ingress(您可以创建更多这些):

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: site1
  annotations:
    # remove next line if not using nginx-ingress-controller
    kubernetes.io/ingress.class: "nginx"
    # next line enable kube-lego for this Ingress
    kubernetes.io/tls-acme: "true"
spec:
  tls:
  - hosts:
    - site1.com
    - www.site1.com
    - site2.com
    - www.site2.com
    secretName: site12-tls
  rules:
    ...
Run Code Online (Sandbox Code Playgroud)

  • kube-lego现在只处于维护模式,支持高达k8s 1.8.kube-lego的官方存储库将[cert-manager](https://github.com/jetstack/cert-manager/)命名为它的继任者.另外[kube-cert-manager](https://github.com/PalmStoneGames/kube-cert-manager)不推荐使用[cert-manager](https://github.com/jetstack/cert-manager/) ). (3认同)

fis*_*x01 9

有几种方法可以设置ssl端点,但是您的解决方案需要解决2个问题:首先,您需要获得有效的证书和密钥.其次,您需要在基础架构中设置ssl端点.

看看k8s 入口控制器.您可以从k8s秘密存储中为入口控制器提供证书/密钥保密,以设置ssl端点.当然,这要求您已拥有有效的证书和密钥.

您可以查看k8s特定的解决方案,以发布和使用Kubernetes Letsencrypt Controller等证书,但我从未使用它们,也不能说它们的工作情况如何.

以下是一些发布和使用ssl证书的一般想法:

1.获得有效的ssl证书和密钥

AWS

如果您在AWS上运行,我能想到的最简单的方法是设置一个ELB,它可以自动为您发出ssl证书.

LetsEncrypt

您还可以查看LetsEncrypt为您的域颁发免费证书.关于它的好处是你可以自动化你的证书颁发过程.

CA

当然,您可以始终采用旧式方式,并从您信任的提供商处颁发证书.

2.设置ssl端点

AWS

同样,如果你有一个ELB,那么它已经充当了一个端点,你就完成了.当然,您的客户端< - > ELB连接已加密,但ELB < - > k8s-cluster未加密.

k8s入口控制器

如上所述,根据您使用的k8s版本,您还可以设置TLS 入口控制器.

k8s代理服务

另一个选择是在k8s群集中设置一个服务,该服务终止ssl连接并代理未加密的流星应用程序的流量.你可以使用nginx作为代理.在这种情况下,我建议您将证书的密钥存储k8s秘密存储区中,并将其安装在nginx容器中.切勿运送内部存有证书密钥等秘密的容器!当然,你仍然需要将加密的流量发送到k8s节点 - 再次,有几种方法可以实现这一点...最简单的方法是修改你的DNS条目以指向k8s节点,但理想情况下你会使用TCP LB .