我想保护在 Kubernetes (EKS) 上运行的 Web 应用程序。连接到集群的所有节点都在私有(private)子网上运行。
我有一个前端服务和十几个后端服务。
前端服务是一个运行容器的 pod,该容器在端口 80 上运行。它被配置为附加到一个 ELB,该 ELB 仅接受来自 443 的流量和一个 https 证书。
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 证书的证书/443?这个配置应该在容器内还是在服务的配置上完成?
最佳答案
我现在已经做了很多调查,这就是我的结论。
我所有的 EKS EC2 实例都在私有(private)子网上运行,这意味着它们无法从外部访问。是的,默认情况下 Kubernetes 不会加密 pod 之间的流量,这意味着获得了我的 VPC 访问权限的黑客(可能是流氓 AWS 工程师、设法物理访问 AWS 数据中心的人、设法访问我的 AWS 账户的人.. .) 将能够嗅探网络流量。同时,我觉得在这种情况下,黑客将可以访问更多!如果他可以访问我的 AWS 账户,他可以自己下载 https 证书。如果他设法走进(高安全性)AWS 数据中心并找到我的服务器 - 最好将他必须承担的风险与您的数据值(value)进行比较。如果您的数据包括信用卡/付款或敏感的个人数据(出生日期、健康详情...),则 SSL 加密是必须的。
无论如何,为了保护 pod 流量,有 2 个选项。
对于负载均衡器,我决定向集群添加一个入口(Ngnix、Traefik...)并使用 https 进行设置。这一点至关重要,因为 ELB 位于公共(public)子网上。
关于security - HTTPS 证书和 Kubernetes (EKS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53169659/