我有一个springboot应用程序
我按照here
的说明通过使用Spring安全性和X509身份验证对其进行了保护。到目前为止,一切都很好...都很有魅力。
现在,我需要在Kubernetes广告应用中部署它。有可能吗?
当我使用K8S时,K8S入口控制器“使用”证书,而在我的应用程序上它丢失了...。是这样吗?是否可以配置它以离开证书,以便可以在我的HttpServletRequest
属性中找到它?
谢谢
天使
答案 0 :(得分:0)
如评论中所指出:
您好,您是否考虑过使用LoadBalancer类型的服务将流量发送到Pods,而没有任何“消费”证书的功能?另外,如果您使用的是nginx-ingress,则可以查看SSL传递:kubernetes.github.io/ingress-nginx/user-guide/tls/…
在Kubernetes中的Client
和Pod
之间建立连接而又不“消耗”证书可以通过以下两种方法之一完成:
LoadBalancer
的服务Ingress
控制器,具有SSL
直通Loadbalancer
的服务LoadBalancer:使用云提供商的负载平衡器在外部公开服务。自动创建外部负载均衡器路由到的NodePort和ClusterIP服务。
您可以配置一项服务,该服务将从外部在Layer4(TCP / UDP)上公开您的流量。流量将被路由到您所需的工作负载(Deployment / Statefulset)。
示例:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 443
targetPort: 443
type: LoadBalancer
Ingress controller
(具有SSL直通)您还可以使用Ingress controller
功能的SSL Passthrough
。具有此功能的控制器之一是ingress-nginx
:
SSL直通利用SNI并从TLS协商中读取虚拟域,这需要兼容的客户端。 TLS侦听器接受连接后,该连接将由控制器本身处理,并在后端和客户端之间来回管道传输。
此功能是通过拦截已配置的HTTPS端口(默认值:443)上的所有流量并将其移交给本地TCP代理来实现的。这会完全绕开NGINX,并带来不可忽略的性能损失。
-Kubernetes.github.io: Ingress nginx: User guide: TLS: SSL passthrough
记住!
--enable-ssl-passthrough
标志启用SSL传递功能,该功能默认情况下处于禁用状态。
作为解决方法的更多内容,您还可以查看(链接中有一个示例):
公开TCP和UDP服务
入口不支持TCP或UDP服务。因此,此Ingress控制器使用标志
--tcp-services-configmap
和--udp-services-configmap
指向现有的配置映射,其中的键是要使用的外部端口,并且该值使用以下格式指示要公开的服务:{{ 1}}-Kubernetes.github.io: Ingress nginx: User guide: Exposing tcp and udp services