Https证书和Kubernetes(EKS)

时间:2018-11-06 10:05:02

标签: security https kubernetes

我想保护在Kubernetes(EKS)上运行的Web应用程序的安全。连接到群集的所有节点都在专用子网上运行。

我有一个前端服务和十二个后端服务。

前端服务是运行在端口80上运行的容器的Pod。它被配置为附加到ELB,该ELB仅接受带有https证书的443通信。

apiVersion: v1
kind: Service
metadata:
  name: service_name
  labels:
    app: service_name
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: xxxxxxxxxx
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
spec:
  ports:
    - port: 443 # Exposed port
      targetPort: 80 # Container port
  selector:
     app: service_name
  type: LoadBalancer

后端服务是运行容器的Pod,这些容器也运行在端口80上。它们均未配置为可从群集外部访问。后端服务通过使用此模板配置它们时指向http://service_name(不是https)相互通信:

apiVersion: v1
kind: Service
metadata:
  name: service_name
spec:
  ports:
    - port: 80 # Exposed port
      targetPort: 80 # Container port
  selector:
     app: service_name

一切正常,但足够吗?

前端/后端容器是否也应使用​​带通配符https证书的certificate / 443?应该在容器内部还是在服务的配置上完成此配置?

1 个答案:

答案 0 :(得分:1)

我已经做了很多调查,这就是我要做的。

我的所有EKS EC2实例都在专用子网上运行,这意味着它们不能从外部访问。是的,默认情况下,Kubernetes不会对Pod之间的流量进行加密,这意味着可以访问我的VPC的黑客(可能是流氓AWS工程师,可以物理访问AWS数据中心的人,可以访问我的AWS账户的人。 。)将能够嗅探网络流量。同时,我觉得在这种情况下,黑客将可以访问更多内容!如果他可以访问我的AWS账户,则可以自己下载https证书。如果他设法进入一个(高安全性)AWS数据中心并找到了我的服务器,最好将他必须承担的风险与您的数据价值进行比较。如果您的数据包括信用卡/付款或敏感的个人数据(出生日期,健康详细信息...),则必须进行SSL加密。 无论如何,为了确保广告连播的流量安全,有2种选择。

  1. 更新所有Pod源代码并在其中添加证书。如果您正在运行许多Pod,并且证书每隔一年到期,则需要大量维护。
  2. 添加一个额外的“网络层”,例如https://istio.io/。这将增加群集的复杂性,对于EKS,AWS的支持将是“尽力而为”的工作。理想情况下,您需要支付Istio支持的费用。

对于负载均衡器,我决定向集群(Ngnix,Traefik ...)添加一个入口,并使用https对其进行设置。当ELB位于公共子网中时,这一点至关重要。