{"id":6743,"date":"2019-04-24T19:00:02","date_gmt":"2019-04-24T19:00:02","guid":{"rendered":"http:\/\/howk.de\/w1\/blog-hardware-accelerated-ssl-tls-termination-in-ingress-controllers-using-kubernetes-device-plugins-and-runtimeclass\/"},"modified":"2019-04-24T19:00:02","modified_gmt":"2019-04-24T19:00:02","slug":"blog-hardware-accelerated-ssl-tls-termination-in-ingress-controllers-using-kubernetes-device-plugins-and-runtimeclass","status":"publish","type":"post","link":"https:\/\/howk.de\/?p=6743","title":{"rendered":"Blog: Hardware Accelerated SSL\/TLS Termination in Ingress Controllers using Kubernetes Device Plugins and RuntimeClass"},"content":{"rendered":"<p><strong>Authors:<\/strong> Mikko Ylinen (Intel)<\/p>\n<h2 id=\"abstract\">Abstract<\/h2>\n<p>A Kubernetes Ingress is a way to connect cluster services to the world outside the cluster. In order<br \/>\nto correctly route the traffic to service backends, the cluster needs an Ingress controller. The<br \/>\nIngress controller is responsible for setting the right destinations to backends based on the<br \/>\nIngress API objects\u2019 information. The actual traffic is routed through a proxy server that<br \/>\nis responsible for tasks such as load balancing and SSL\/TLS (later \u201cSSL\u201d refers to both SSL<br \/>\nor TLS ) termination. The SSL termination is a CPU heavy operation due to the crypto operations<br \/>\ninvolved. To offload some of the CPU intensive work away from the CPU, OpenSSL based proxy<br \/>\nservers can take the benefit of OpenSSL Engine API and dedicated crypto hardware. This frees<br \/>\nCPU cycles for other things and improves the overall throughput of the proxy server.<\/p>\n<p>In this blog post, we will show how easy it is to make hardware accelerated crypto available<br \/>\nfor containers running the Ingress controller proxy using some of the recently created Kubernetes<br \/>\nbuilding blocks: Device plugin framework and RuntimeClass. At the end, a reference setup is given<br \/>\nusing an HAproxy based Ingress controller accelerated using Intel&reg; QuickAssist Technology cards.<\/p>\n<h2 id=\"about-proxies-openssl-engine-and-crypto-hardware\">About Proxies, OpenSSL Engine and Crypto Hardware<\/h2>\n<p>The proxy server plays a vital role in a Kubernetes Ingress Controller function. It proxies<br \/>\nthe traffic to the backends per Ingress objects routes. Under heavy traffic load, the performance<br \/>\nbecomes critical especially if the proxying involves CPU intensive operations like SSL crypto.<\/p>\n<p>The OpenSSL project provides the widely adopted library for implementing the SSL protocol. Of<br \/>\nthe commonly known proxy servers used by Kubernetes Ingress controllers, Nginx and HAproxy use<br \/>\nOpenSSL. The CNCF graduated Envoy proxy uses BoringSSL but there seems to be <a href=\"https:\/\/github.com\/envoyproxy\/envoy\/pull\/5161#issuecomment-446374130\" target=\"_blank\">community interest<br \/>\nin having OpenSSL as the alternative<\/a> for it too.<\/p>\n<p>The OpenSSL SSL protocol library relies on libcrypto that implements the cryptographic functions.<br \/>\nFor quite some time now (first introduced in 0.9.6 release), OpenSSL has provided an <a href=\"https:\/\/github.com\/openssl\/openssl\/blob\/master\/README.ENGINE\" target=\"_blank\">ENGINE<br \/>\nconcept<\/a> that allows these cryptographic operations to be offloaded to a dedicated crypto<br \/>\nacceleration hardware. Later, a special <em>dynamic<\/em> ENGINE enabled the crypto hardware specific<br \/>\npieces to be implemented in an independent loadable module that can be developed outside the<br \/>\nOpenSSL code base and distributed separately. From the application\u2019s perspective, this is also<br \/>\nideal because they don\u2019t need to know the details of how to use the hardware, and the hardware<br \/>\nspecific module can be loaded\/used when the hardware is available.<\/p>\n<p>Hardware based crypto can greatly improve Cloud applications\u2019 performance due to hardware<br \/>\naccelerated processing in SSL operations as discussed, and can provide other crypto<br \/>\nservices like key\/random number generation. Clouds can make the hardware easily available<br \/>\nusing the dynamic ENGINE and several loadable module implementations exist, for<br \/>\nexample, <a href=\"https:\/\/docs.aws.amazon.com\/cloudhsm\/latest\/userguide\/openssl-library.html\" target=\"_blank\">CloudHSM<\/a>, <a href=\"https:\/\/github.com\/opencryptoki\/openssl-ibmca\" target=\"_blank\">IBMCA<\/a>, or <a href=\"https:\/\/github.com\/intel\/QAT_Engine\/\" target=\"_blank\">QAT Engine<\/a>.<\/p>\n<p>For Cloud deployments, the ideal scenario is for these modules to be shipped as part of<br \/>\nthe container workload. The workload would get scheduled on a node that provides the<br \/>\nunderlying hardware that the module needs to access. On the other hand, the workloads<br \/>\nshould run the same way and without code modifications regardless of the crypto acceleration<br \/>\nhardware being available or not. The OpenSSL dynamic engine enables this. Figure 1 below<br \/>\nillustrates these two scenarios using a typical Ingress Controller container as an example.<br \/>\nThe red colored boxes indicate the differences between a container with a crypto hardware<br \/>\nengine enabled container vs. a \u201cstandard\u201d one. It\u2019s worth pointing out that the configuration<br \/>\nchanges shown do not necessarily require another version of the container since the configurations<br \/>\ncould be managed, e.g., using ConfigMaps.<\/p>\n<figure>\n<img decoding=\"async\" src=\"https:\/\/kubernetes.io\/images\/blog\/2019-04-23-hardware-accelerated-tls-termination\/k8s-blog-fig1.png\" alt=\"Figure 1. Examples of Ingress controller containers\" width=\"600\" \/><figcaption>\n<p>Figure 1. Examples of Ingress controller containers<\/p>\n<\/figcaption><\/figure>\n<h2 id=\"hardware-resources-and-isolation\">Hardware Resources and Isolation<\/h2>\n<p>To be able to deploy workloads with hardware dependencies, Kubernetes provides excellent extension<br \/>\nand configurability mechanisms. Let\u2019s take a closer look into Kubernetes the <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/extend-kubernetes\/compute-storage-net\/device-plugins\/\" target=\"_blank\">device plugin framework<\/a><br \/>\n(beta in 1.14) and <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/containers\/runtime-class\/\" target=\"_blank\">RuntimeClass<\/a> (beta in 1.14) and learn how they can be leveraged to expose crypto<br \/>\nhardware to workloads.<\/p>\n<p>The device plugin framework, first introduced in Kubernetes 1.8, provides a way for hardware vendors<br \/>\nto register and allocate node hardware resources to Kubelets. The plugins implement the hardware<br \/>\nspecific initialization logic and resource management. The pods can request hardware resources in<br \/>\ntheir PodSpec, which also guarantees the pod is scheduled on a node that can provide those resources.<\/p>\n<p>The device resource allocation for containers is non-trivial. For applications dealing with security,<br \/>\nthe hardware level isolation is critical. The PCIe based crypto acceleration device functions can<br \/>\nbenefit from IO hardware virtualization, through an I\/O Memory Management Unit (IOMMU), to provide<br \/>\nthe isolation: an <em>IOMMU group<\/em> the device belongs to provides the isolated resource for a workload<br \/>\n(assuming the crypto cards do not share the IOMMU group with other devices). The number of isolated<br \/>\nresources can be further increased if the PCIe device supports the Single-Root I\/O Virtualization<br \/>\n(SR-IOV) specification. SR-IOV allows the PCIe device to be split further to <em>virtual functions<\/em> (VF),<br \/>\nderived from <em>physical function<\/em> (PF) devices, and each belonging to their own IOMMU group. To expose<br \/>\nthese IOMMU isolated device functions to user space and containers, the host kernel should bind<br \/>\nthem to a specific device driver. In Linux, this driver is vfio-pci and it makes each device<br \/>\navailable through a character device in user space. The kernel vfio-pci driver provides user space<br \/>\napplications with a direct, IOMMU backed access to PCIe devices and functions, using a mechanism<br \/>\ncalled <em>PCI passthrough<\/em>. The interface can be leveraged by user space frameworks, such as the<br \/>\nData Plane Development Kit (DPDK). Additionally, virtual machine (VM) hypervisors can provide<br \/>\nthese user space device nodes to VMs and expose them as PCI devices to the guest kernel.<br \/>\nAssuming support from the guest kernel, the VM gets close to native performant direct access to the<br \/>\nunderlying host devices.<\/p>\n<p>To advertise these device resources to Kubernetes, we can have a simple Kubernetes device plugin<br \/>\nthat runs the initialization (i.e., binding), calls kubelet\u2019s <code>Registration<\/code> gRPC service, and<br \/>\nimplements the DevicePlugin gRPC service that kubelet calls to, e.g., to <code>Allocate<\/code> the resources<br \/>\nupon Pod creation.<\/p>\n<h2 id=\"device-assignment-and-pod-deployment\">Device Assignment and Pod Deployment<\/h2>\n<p>At this point, you may ask what the container could do with a VFIO device node? The answer comes<br \/>\nafter we first take a quick look into the Kubernetes RuntimeClass.<\/p>\n<p>The Kubernetes RuntimeClass was created to provide better control and configurability<br \/>\nover a variety of <em>runtimes<\/em> (an earlier <a href=\"https:\/\/kubernetes.io\/blog\/2018\/10\/10\/kubernetes-v1.12-introducing-runtimeclass\/\" target=\"_blank\">blog post<\/a> goes into the details of the needs,<br \/>\nstatus and roadmap for it) that are available in the cluster. In essence, the RuntimeClass<br \/>\nprovides cluster users better tools to pick and use the runtime that best suits for the pod use case.<\/p>\n<p>The OCI compatible <a href=\"https:\/\/katacontainers.io\/\" target=\"_blank\">Kata Containers runtime<\/a> provides workloads with a hardware virtualized<br \/>\nisolation layer. In addition to workload isolation, the Kata Containers VM has the added<br \/>\nside benefit that the VFIO devices, as <code>Allocate<\/code>\u2019d by the device plugin, can be passed<br \/>\nthrough to the container as hardware isolated devices. The only requirement is that the<br \/>\nKata Containers kernel has driver for the exposed device enabled.<\/p>\n<p>That\u2019s all it really takes to enable hardware accelerated crypto for container workloads. To summarize:<\/p>\n<ol>\n<li>Cluster needs a device plugin running on the node that provides the hardware<\/li>\n<li>Device plugin exposes the hardware to user space using the VFIO driver<\/li>\n<li>Pod requests the device resources and Kata Containers as the RuntimeClass in the PodSpec<\/li>\n<li>The container has the hardware adaptation library and the OpenSSL engine module<\/li>\n<\/ol>\n<p>Figure 2 shows the overall setup using the Container A illustrated earlier.<\/p>\n<figure>\n<img decoding=\"async\" src=\"https:\/\/kubernetes.io\/images\/blog\/2019-04-23-hardware-accelerated-tls-termination\/k8s-blog-fig2.png\" alt=\"Figure 2. Deployment overview\" width=\"600\" \/><figcaption>\n<p>Figure 2. Deployment overview<\/p>\n<\/figcaption><\/figure>\n<h2 id=\"reference-setup\">Reference Setup<\/h2>\n<p>Finally, we describe the necessary building blocks and steps to build a functional<br \/>\nsetup described in Figure 2 that enables hardware accelerated SSL termination in<br \/>\nan Ingress Controller using an Intel&reg; QuickAssist Technology (QAT) PCIe device.<br \/>\nIt should be noted that the use cases are not limited to Ingress controllers, but<br \/>\nany OpenSSL based workload can be accelerated.<\/p>\n<h3 id=\"cluster-configuration\">Cluster configuration:<\/h3>\n<ul>\n<li>Kubernetes 1.14 (<code>RuntimeClass<\/code> and <code>DevicePlugin<\/code> feature gates enabled (both are <code>true<\/code> in 1.14)<\/li>\n<li>RuntimeClass ready runtime and Kata Containers configured<\/li>\n<\/ul>\n<h3 id=\"host-configuration\">Host configuration:<\/h3>\n<ul>\n<li>Intel&reg; QAT driver release with the kernel drivers installed for both host kernel and Kata Containers kernel (or on a rootfs as loadable modules)<\/li>\n<li><a href=\"https:\/\/github.com\/intel\/intel-device-plugins-for-kubernetes\/tree\/master\/cmd\/qat_plugin\" target=\"_blank\">QAT device plugin<\/a> DaemonSet deployed<\/li>\n<\/ul>\n<h3 id=\"ingress-controller-configuration-and-deployment\">Ingress controller configuration and deployment:<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/jcmoraisjr\/haproxy-ingress\" target=\"_blank\">HAproxy-ingress<\/a> ingress controller in a modified container that has\n<ul>\n<li>the QAT HW HAL user space library (part of Intel&reg; QAT SW release) and<\/li>\n<li>the <a href=\"https:\/\/github.com\/intel\/QAT_Engine\/\" target=\"_blank\">OpenSSL QAT Engine<\/a> built in<\/li>\n<\/ul>\n<\/li>\n<li>Haproxy-ingress ConfigMap to enable QAT engine usage\n<ul>\n<li><code>ssl-engine=\u201dqat\u201d<\/code><\/li>\n<li><code>ssl-mode-async=true<\/code><\/li>\n<\/ul>\n<\/li>\n<li>Haproxy-ingress deployment <code>.yaml<\/code> to\n<ul>\n<li>Request <code>qat.intel.com: n<\/code> resources<\/li>\n<li>Request <code>runtimeClassName: kata-containers<\/code> (name value depends on cluster config)<\/li>\n<\/ul>\n<\/li>\n<li>(QAT device config file for each requested device resource with OpenSSL engine configured available in the container)<\/li>\n<\/ul>\n<p>Once the building blocks are available, the hardware accelerated SSL\/TLS can be tested by following the <a href=\"https:\/\/github.com\/jcmoraisjr\/haproxy-ingress\/tree\/master\/examples\/tls-termination\" target=\"_blank\">TLS termination<br \/>\nexample<\/a> steps. In order to verify the hardware is used, you can check <code>\/sys\/kernel\/debug\/*\/fw_counters<\/code> files on host as they<br \/>\nget updated by the Intel&reg; QAT firmware.<\/p>\n<p>Haproxy-ingress and HAproxy are used because HAproxy can be directly configured to use the OpenSSL engine using<br \/>\n<code>ssl-engine &lt;name&gt; [algo ALGOs]<\/code> configuration flag without modifications to the global openssl configuration file.<br \/>\nMoreover, HAproxy can offload configured algorithms using asynchronous calls (with <code>ssl-mode-async<\/code>) to further improve performance.<\/p>\n<h2 id=\"call-to-action\">Call to Action<\/h2>\n<p>In this blog post we have shown how Kubernetes Device Plugins and RuntimeClass can be used to provide isolated hardware<br \/>\naccess for applications in pods to offload crypto operations to hardware accelerators. Hardware accelerators can be used<br \/>\nto speed up crypto operations and also save CPU cycles to other tasks. We demonstrated the setup using HAproxy that already<br \/>\nsupports asynchronous crypto offload with OpenSSL.<\/p>\n<p>The next steps for our team is to repeat the same for Envoy (with an OpenSSL based TLS transport socket built<br \/>\nas an extension). Furthermore, we are working to enhance Envoy to be able to <a href=\"https:\/\/github.com\/envoyproxy\/envoy\/issues\/6248\" target=\"_blank\">offload BoringSSL asynchronous<br \/>\nprivate key operations<\/a> to a crypto acceleration hardware. Any review feedback or help is appreciated!<\/p>\n<p>How many CPU cycles can your crypto application save for other tasks when offloading crypto processing to a dedicated accelerator?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Authors: Mikko Ylinen (Intel) Abstract A Kubernetes Ingress is a way to connect cluster services to the world outside the cluster. In order to correctly route the traffic to service backends, the cluster needs an Ingress controller. The Ingress controller is responsible for setting the right destinations to backends based on the Ingress API objects\u2019 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.9.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Blog: Hardware Accelerated SSL\/TLS Termination in Ingress Controllers using Kubernetes Device Plugins and RuntimeClass - Howk IT-Dienstleistungen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/howk.de\/?p=6743\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Blog: Hardware Accelerated SSL\/TLS Termination in Ingress Controllers using Kubernetes Device Plugins and RuntimeClass - Howk IT-Dienstleistungen\" \/>\n<meta property=\"og:description\" content=\"Authors: Mikko Ylinen (Intel) Abstract A Kubernetes Ingress is a way to connect cluster services to the world outside the cluster. In order to correctly route the traffic to service backends, the cluster needs an Ingress controller. The Ingress controller is responsible for setting the right destinations to backends based on the Ingress API objects\u2019 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/howk.de\/?p=6743\" \/>\n<meta property=\"og:site_name\" content=\"Howk IT-Dienstleistungen\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/howk.de\" \/>\n<meta property=\"article:published_time\" content=\"2019-04-24T19:00:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kubernetes.io\/images\/blog\/2019-04-23-hardware-accelerated-tls-termination\/k8s-blog-fig1.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/howk.de\/?p=6743#article\",\"isPartOf\":{\"@id\":\"https:\/\/howk.de\/?p=6743\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/howk.de\/#\/schema\/person\/b029bd02d4f35dce869ef54c81a100c5\"},\"headline\":\"Blog: Hardware Accelerated SSL\/TLS Termination in Ingress Controllers using Kubernetes Device Plugins and RuntimeClass\",\"datePublished\":\"2019-04-24T19:00:02+00:00\",\"dateModified\":\"2019-04-24T19:00:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/howk.de\/?p=6743\"},\"wordCount\":1674,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/howk.de\/#organization\"},\"articleSection\":[\"Hi Tech\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/howk.de\/?p=6743#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/howk.de\/?p=6743\",\"url\":\"https:\/\/howk.de\/?p=6743\",\"name\":\"Blog: Hardware Accelerated SSL\/TLS Termination in Ingress Controllers using Kubernetes Device Plugins and RuntimeClass - Howk IT-Dienstleistungen\",\"isPartOf\":{\"@id\":\"https:\/\/howk.de\/#website\"},\"datePublished\":\"2019-04-24T19:00:02+00:00\",\"dateModified\":\"2019-04-24T19:00:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/howk.de\/?p=6743#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/howk.de\/?p=6743\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/howk.de\/?p=6743#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/howk.de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog: Hardware Accelerated SSL\/TLS Termination in Ingress Controllers using Kubernetes Device Plugins and RuntimeClass\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/howk.de\/#website\",\"url\":\"https:\/\/howk.de\/\",\"name\":\"Howk IT-Dienstleistungen\",\"description\":\"Howk IT Services - Howk IT-Dienstleistungen\",\"publisher\":{\"@id\":\"https:\/\/howk.de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/howk.de\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/howk.de\/#organization\",\"name\":\"HowK\",\"url\":\"https:\/\/howk.de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/howk.de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/howk.de\/w1\/wp-content\/uploads\/2013\/12\/howk-logo.png\",\"contentUrl\":\"https:\/\/howk.de\/w1\/wp-content\/uploads\/2013\/12\/howk-logo.png\",\"width\":170,\"height\":170,\"caption\":\"HowK\"},\"image\":{\"@id\":\"https:\/\/howk.de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/howk.de\",\"http:\/\/de.linkedin.com\/in\/howkde\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/howk.de\/#\/schema\/person\/b029bd02d4f35dce869ef54c81a100c5\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/howk.de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b5a20f4d07bca1b73f25cff58a1116c4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b5a20f4d07bca1b73f25cff58a1116c4?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"url\":\"https:\/\/howk.de\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Blog: Hardware Accelerated SSL\/TLS Termination in Ingress Controllers using Kubernetes Device Plugins and RuntimeClass - Howk IT-Dienstleistungen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/howk.de\/?p=6743","og_locale":"en_US","og_type":"article","og_title":"Blog: Hardware Accelerated SSL\/TLS Termination in Ingress Controllers using Kubernetes Device Plugins and RuntimeClass - Howk IT-Dienstleistungen","og_description":"Authors: Mikko Ylinen (Intel) Abstract A Kubernetes Ingress is a way to connect cluster services to the world outside the cluster. In order to correctly route the traffic to service backends, the cluster needs an Ingress controller. The Ingress controller is responsible for setting the right destinations to backends based on the Ingress API objects\u2019 [&hellip;]","og_url":"https:\/\/howk.de\/?p=6743","og_site_name":"Howk IT-Dienstleistungen","article_publisher":"https:\/\/www.facebook.com\/howk.de","article_published_time":"2019-04-24T19:00:02+00:00","og_image":[{"url":"https:\/\/kubernetes.io\/images\/blog\/2019-04-23-hardware-accelerated-tls-termination\/k8s-blog-fig1.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/howk.de\/?p=6743#article","isPartOf":{"@id":"https:\/\/howk.de\/?p=6743"},"author":{"name":"admin","@id":"https:\/\/howk.de\/#\/schema\/person\/b029bd02d4f35dce869ef54c81a100c5"},"headline":"Blog: Hardware Accelerated SSL\/TLS Termination in Ingress Controllers using Kubernetes Device Plugins and RuntimeClass","datePublished":"2019-04-24T19:00:02+00:00","dateModified":"2019-04-24T19:00:02+00:00","mainEntityOfPage":{"@id":"https:\/\/howk.de\/?p=6743"},"wordCount":1674,"commentCount":0,"publisher":{"@id":"https:\/\/howk.de\/#organization"},"articleSection":["Hi Tech"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/howk.de\/?p=6743#respond"]}]},{"@type":"WebPage","@id":"https:\/\/howk.de\/?p=6743","url":"https:\/\/howk.de\/?p=6743","name":"Blog: Hardware Accelerated SSL\/TLS Termination in Ingress Controllers using Kubernetes Device Plugins and RuntimeClass - Howk IT-Dienstleistungen","isPartOf":{"@id":"https:\/\/howk.de\/#website"},"datePublished":"2019-04-24T19:00:02+00:00","dateModified":"2019-04-24T19:00:02+00:00","breadcrumb":{"@id":"https:\/\/howk.de\/?p=6743#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/howk.de\/?p=6743"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/howk.de\/?p=6743#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/howk.de\/"},{"@type":"ListItem","position":2,"name":"Blog: Hardware Accelerated SSL\/TLS Termination in Ingress Controllers using Kubernetes Device Plugins and RuntimeClass"}]},{"@type":"WebSite","@id":"https:\/\/howk.de\/#website","url":"https:\/\/howk.de\/","name":"Howk IT-Dienstleistungen","description":"Howk IT Services - Howk IT-Dienstleistungen","publisher":{"@id":"https:\/\/howk.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/howk.de\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/howk.de\/#organization","name":"HowK","url":"https:\/\/howk.de\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/howk.de\/#\/schema\/logo\/image\/","url":"https:\/\/howk.de\/w1\/wp-content\/uploads\/2013\/12\/howk-logo.png","contentUrl":"https:\/\/howk.de\/w1\/wp-content\/uploads\/2013\/12\/howk-logo.png","width":170,"height":170,"caption":"HowK"},"image":{"@id":"https:\/\/howk.de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/howk.de","http:\/\/de.linkedin.com\/in\/howkde"]},{"@type":"Person","@id":"https:\/\/howk.de\/#\/schema\/person\/b029bd02d4f35dce869ef54c81a100c5","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/howk.de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b5a20f4d07bca1b73f25cff58a1116c4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b5a20f4d07bca1b73f25cff58a1116c4?s=96&d=mm&r=g","caption":"admin"},"url":"https:\/\/howk.de\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/howk.de\/index.php?rest_route=\/wp\/v2\/posts\/6743"}],"collection":[{"href":"https:\/\/howk.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/howk.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/howk.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/howk.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6743"}],"version-history":[{"count":0,"href":"https:\/\/howk.de\/index.php?rest_route=\/wp\/v2\/posts\/6743\/revisions"}],"wp:attachment":[{"href":"https:\/\/howk.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/howk.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/howk.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}