在网络服务器和 Kubernetes Ingress/OpenShift 路由级别配置 SSL 证书的优缺点
Pros and cons of configuring SSL certificate in webserver vs Kubernetes Ingress/OpenShift route level
假设我有一个 Python application/JBoss 应用程序。
我可以在服务器级别设置我的 SSL 证书
例如在 Python 3 中使用 SimpleHTTPServer
:
def main():
key_file = "/etc/letsencrypt/live/mydomain.fr/privkey.pem"
cert_file = "/etc/letsencrypt/live/mydomain.fr/fullchain.pem"
port = 9443
httpd = HTTPServer(('0.0.0.0', port), SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket,
keyfile=key_file,
certfile=cert_file, server_side=True)
httpd.serve_forever()
但是,如果我们的 Webapp 部署在 Kubernetes 或 OpenShift 中:我们可以将我们的应用程序保留在 HTTP 中,并使用 Kubernetes ingress (spec.tls) or OpenShift route (spec.tls) 在 HTTPs[=25= 中公开应用程序] 并路由到服务,然后是 HTTP 中的 pod。
两种解决方案的优缺点是什么?
虽然我们在 HTTP 中,但使用 Kubernetes 服务 IP/pods IP 时,我可以认为流量在集群内部加密(如 pod 到 pod)吗?
Kubernetes 通常用于由多个服务组成的应用程序,例如微服务架构。在这样的架构中,到“应用程序”的 https 连接在网关处终止,通常是 Kubernetes Ingress 负载均衡器,然后根据 url 请求的内容,它被转发到集群中适当的 Pod。
您描述的情况只是一个Pod/Deployment。对于如此小的用例,可能不值得使用完整的 Kubernetes 集群。当您有许多节点来处理您的工作负载时,Kuberntes 通常用于较大的环境。
在更大的环境中使用 Kubernetes 的一个好处是它可以很好地将 基础设施 与 应用程序 分开。参见例如DevOps Before and After Kubernetes。例如,您的应用程序的开发人员可以专注于实现功能,让基础架构处理其余部分。在您的情况下,这意味着开发人员不需要处理 privkey.pem
和 fullchain.pem
等 SSL 证书 - 这可以在应用程序外部处理并独立更改。
Can I consider traffic is encrypted inside the cluster (like pod to pod) when using Kubernetes services IP/pods IPs though we are in HTTP?
Pod 到 Pod 的流量不会加密,除非您或您的集群配置了 SSL/HTTPS。但是 Pod 到 Pod 的流量是 Kubernetes 集群内的内部流量,它通常在私有 IP 子网内。也就是说,您可以添加一个 服务网格 产品,例如Istio 使用 mTLS 获得 Pod 到 Pod 的强加密,还包括使用证书进行身份验证 - 但这仍然由 基础设施 管理在应用程序容器之外。
假设我有一个 Python application/JBoss 应用程序。 我可以在服务器级别设置我的 SSL 证书
例如在 Python 3 中使用 SimpleHTTPServer
:
def main():
key_file = "/etc/letsencrypt/live/mydomain.fr/privkey.pem"
cert_file = "/etc/letsencrypt/live/mydomain.fr/fullchain.pem"
port = 9443
httpd = HTTPServer(('0.0.0.0', port), SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket,
keyfile=key_file,
certfile=cert_file, server_side=True)
httpd.serve_forever()
但是,如果我们的 Webapp 部署在 Kubernetes 或 OpenShift 中:我们可以将我们的应用程序保留在 HTTP 中,并使用 Kubernetes ingress (spec.tls) or OpenShift route (spec.tls) 在 HTTPs[=25= 中公开应用程序] 并路由到服务,然后是 HTTP 中的 pod。
两种解决方案的优缺点是什么?
虽然我们在 HTTP 中,但使用 Kubernetes 服务 IP/pods IP 时,我可以认为流量在集群内部加密(如 pod 到 pod)吗?
Kubernetes 通常用于由多个服务组成的应用程序,例如微服务架构。在这样的架构中,到“应用程序”的 https 连接在网关处终止,通常是 Kubernetes Ingress 负载均衡器,然后根据 url 请求的内容,它被转发到集群中适当的 Pod。
您描述的情况只是一个Pod/Deployment。对于如此小的用例,可能不值得使用完整的 Kubernetes 集群。当您有许多节点来处理您的工作负载时,Kuberntes 通常用于较大的环境。
在更大的环境中使用 Kubernetes 的一个好处是它可以很好地将 基础设施 与 应用程序 分开。参见例如DevOps Before and After Kubernetes。例如,您的应用程序的开发人员可以专注于实现功能,让基础架构处理其余部分。在您的情况下,这意味着开发人员不需要处理 privkey.pem
和 fullchain.pem
等 SSL 证书 - 这可以在应用程序外部处理并独立更改。
Can I consider traffic is encrypted inside the cluster (like pod to pod) when using Kubernetes services IP/pods IPs though we are in HTTP?
Pod 到 Pod 的流量不会加密,除非您或您的集群配置了 SSL/HTTPS。但是 Pod 到 Pod 的流量是 Kubernetes 集群内的内部流量,它通常在私有 IP 子网内。也就是说,您可以添加一个 服务网格 产品,例如Istio 使用 mTLS 获得 Pod 到 Pod 的强加密,还包括使用证书进行身份验证 - 但这仍然由 基础设施 管理在应用程序容器之外。