Kuberntes入口和客户端身份验证应用程序

时间:2020-11-01 15:00:33

标签: kubernetes-ingress

我有一个springboot应用程序

我按照here

的说明通过使用Spring安全性和X509身份验证对其进行了保护。

到目前为止,一切都很好...都很有魅力。

现在,我需要在Kubernetes广告应用中部署它。有可能吗?

当我使用K8S时,K8S入口控制器“使用”证书,而在我的应用程序上它丢失了...。是这样吗?是否可以配置它以离开证书,以便可以在我的HttpServletRequest属性中找到它?

谢谢

天使

1 个答案:

答案 0 :(得分:0)

如评论中所指出:

您好,您是否考虑过使用LoadBalancer类型的服务将流量发送到Pods,而没有任何“消费”证书的功能?另外,如果您使用的是nginx-ingress,则可以查看SSL传递:kubernetes.github.io/ingress-nginx/user-guide/tls/…

在Kubernetes中的ClientPod之间建立连接而又不“消耗”证书可以通过以下两种方法之一完成:

  • 类型为LoadBalancer的服务
  • Ingress控制器,具有SSL直通

类型为Loadbalancer的服务

LoadBalancer:使用云提供商的负载平衡器在外部公开服务。自动创建外部负载均衡器路由到的NodePort和ClusterIP服务。

-Kubernetes.io: Service: LoadBalancer

您可以配置一项服务,该服务将从外部在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