Container Ingress
Traffic Management and Kubernetes Ingress for Containerized Applications
Overview
Software Load Balancer
Web Application Security
Container Ingress
As enterprises modernize and build containerized Kubernetes applications, they are confronted with a lab-to-production gap that requires a very different set of requirements on app availability, observability, on-demand elasticity, multi-cloud deployments and more. Networking and operations teams find that they need to piece together a mishmash of legacy or open-source container management tools that are disjointed and complicate their ability to deploy and manage modern applications at scale.
VMware NSX Advanced Load Balancer delivers multi-cloud application services such as load balancing for containerized applications with microservices architecture through dynamic service discovery, application traffic management , and web application security . Container Ingress provides scalable and enterprise-class Kubernetes ingress traffic management, including local and global server load balancing (GSLB) , web application firewall (WAF) and performance monitoring, across multi-cluster, multi-region, and multi-cloud environments. Avi integrates seamlessly with Kubernetes for container and microservices orchestration and security.
How Enterprises Deploy Container Ingress Today
Global & Local Traffic Management
NSX ALB pod is running in the Kubernetes/OpenShift GSLB leader cluster and follower clusters, enabling multi-cluster application deployment, mapping the same application deployed on multiple clusters to a single GSLB service, extending application ingresses across multi region and multi availability zone deployments. Enterprise-class application services for containerized applications, orchestrated by platforms like Kubernetes, include:
Load balancing , health monitoring, TLS/SSL offload, certificate management, session persistence, content/URL switching
Redirecting requests to the appropriate site/region based on the availability, locality of the user to the site, site persistence and load
Content/URL switching, redirection, error page, caching, compression and on-demand autoscaling
Application & Container Monitoring and Analytics
Analytics is the foundation for intent-based systems to collect, aggregate, accumulate, store, and rollup metrics and logs, especially for containerized applications with a microservices framework. NSX ALB provides the following container ingress traffic management capabilities without having to instrument each application:
Application Map:
Real-time dynamic map of communications between microservices available as a dependency map. Operators can extract critical metrics such as latency, bandwidth, request rate, etc. across microservices deployment architectures.
Analytics Dashboard:
An end-to-end latency view of all transactions in addition to real-time and historic views of critical metrics such as requests/transaction/connection rate/throughput.
Log File Analytics:
Logs of every significant transaction including errors and excessive latencies with built-in analytics by pool member, response time, device type and more.
Client Analytics:
Aggregated page load times, dimensional analytics such as device type, country, and detailed resource timing information for every page in the application via JavaScript.
Security Analytics:
A breakdown of TLS/SSL versions, transaction rate, health score based on SSL security profiles and certificates, DDoS analytics including type of attacks, and detection on bots attacks.
Dynamic Service Discovery
Service discovery bridges the gap between a service’s name and access information (IP address) by providing a dynamic mapping. NSX ALB provides an authoritative DNS server for users’ devices and other services to map host/domain names to virtual IP addresses (VIPs) to automate service discovery, including:
Built-in IPAM for virtual IP address allocation
A variety of DNS configuration options and the ability to add static A and CNAME records to the DNS server
Continuous Integration and Delivery (CI/CD) and application upgrades using a Blue-Green or canary deployment models
Deliver Elastic Kubernetes Ingress Controller and Services
A single platform for consolidated traffic management, security, and observability
Services such as traffic management, service discovery, container monitoring, analytics and security remain a critical component for enterprises to deploy containers in production.
NSX ALB provides proven Kubernetes ingress services to deploy and secure container-based applications workloads in production Kubernetes clusters.
Featured Resources
Solution Brief
Deliver Consolidated Kubernetes Ingress Services
Learn how you can deliver modern multi-site, multi-cluster, ingress networking services
Solution Brief
Deliver Consolidated Kubernetes Ingress Services
Videos
Kubernetes Ingress Controller and Services
Learn about Avi's elastic, consolidated Kubernetes ingress services
Videos
Kubernetes Ingress Controller and Services
Case Studies
Deutsche Bank Adopts “Everything-as-a-Service” Strategy for Applications
Learn about a modern PaaS platform with Avi Networks and Red Hat OpenShift.
Case Studies
Deutsche Bank Adopts “Everything-as-a-Service” Strategy for Applications
body, .section--bg-lgray {
background-color: #fbfbfb;
}
/*==========================
* Hero Sizing Adjustments
============================*/
.hero-v2__title {
font-size: 3.25rem;
line-height: 1.25;
}
.hero-v2__subtitle {
font-size: 1.75rem;
}
.hero-v2--with-subnav .hero-v2__title, .hero-v2__title {
padding-bottom: 2rem;
}
/*==========================
* Section Spacing Adjustments
============================*/
.section {
padding-top: 6rem;
padding-bottom: 6rem;
}
.section--bg-none + .section--bg-none {
padding-top: 0;
}
.section--quote + .section--collapse {
padding-top: 0;
margin-top: -2rem;
}
.section--collapse {
padding-top: 0;
}
.basic-content--leadin.section {
padding-bottom: 2rem;
}
.basic-content img:not(:last-child) {
margin-top: 3rem;
margin-bottom: 3rem;
}
.basic-content__title, .section__title {
margin-bottom: 3rem;
}
/*==========================
* Body Copy Resizing
============================*/
.basic-content img {
width: 50em;
}
.basic-content--leadin p:first-of-type {
font-size: 1.5rem;
line-height: 1.75;
font-weight: 400;
}
.main-content p, .main-content li {
font-size: 1.125rem;
line-height: 1.75;
font-weight: 100;
}
.main-content p a, .main-content li a {
font-weight: 400;
text-decoration: underline;
}
.basic-content--leadin p a {
font-weight: 600;
}
.main-content a.button {
text-decoration: none;
font-weight: 600;
}
.main-content ul li::before {
content: '';
background-color: #FF4B00;
font-size: inherit;
padding-right: 0.25em;
position: absolute;
top: 17px;
left: -1px;
display: inline-block;
height: 7px;
width: 7px;
border-radius: 100%;
}
.main-content ul li {
padding-left: 1.25rem;
}
.quote {
line-height: 1.75;
}
.quote__body::before {
content: '“';
font-family: arial, sans-serif;
top: -0.4em;
left: -0.6em;
font-size: 72px;
font-weight: 600;
}
/*==========================
* Tab Styles
* 1) '.xan' is specific identifier for a new module type.
============================*/
.xan .tab-group {
background-color: #fff;
border: 30px solid #cfe8ee;
display: flex;
max-width: 980px;
margin: 0 auto;
padding: 2rem 3rem;
}
.xan .tab-group__tabs {
border: 0;
border-right: 1px solid #f6f6f6;
width: 30%;
max-width: 30%;
}
.xan .tab-group__tab {
border-bottom: 0px;
border-radius: 40px 0 0 40px;
}
.xan .js-tab-x {
background: #ffffff;
border-right: 10px solid #fff;
color: #333333;
font-size: 18px;
font-weight: 100;
text-transform: none;
width: 100%;
text-align: left;
box-shadow: none;
filter: none;
padding: 10px 18px 10px 40px;
margin: 6px 0;
transition: all 300ms ease-out;
font-family: 'Open Sans', 'Brandon Grotesque' ,sans-serif;
}
.xan .tab-group__tabs .js-tab-x:hover {
font-weight: 600;
transition: all 0.5s ease-out;
}
.xan .tab-group__tabs .js-tab-x h3 {
border: none !important;
box-shadow: none;
}
.xan .tab-group__tab--is-active {
border: 0;
border-right: 10px solid #FF4B00;
background-color: #f7f7f7;
border-radius: 40px 0 0 40px ;
color: #FF4B00;
font-weight: 600;
transition: all 300ms ease-out;
}
.xan .tab-group__tab:focus {
outline: none;
transition: all 300ms ease-out;
}
.xan .tab-group__tabs .js-tab-x::before, .xan .tab-group__tabs .js-tab-x::after {
content: "";
display: none;
}
.xan .tab-group__panel {
width: 70%;
position: relative;
height: auto;
font-size: 1.125rem;
font-weight: 100;
transition: all 300ms ease-out;
}
.xan .tab-group__panel ul li {
padding-left: 18px !important;
}
/* =====================
* END OF TABS
========================*/
/* =====================
* Offer Section
========================*/
.section.offer-bar {
background: #fff;
color: #233448;
clear: both;
}
.offer-bar__grid {
align-items: center;
}
.section.offer-bar h2 .offer-bar__extended-title {
font-size: 30px;
color: #233448;
}
.section.offer-bar h2 {
font-size: 40px;
font-weight: 100;
}
.section.offer-bar p {
font-weight: 100;
font-size: 18px;
}
.offer-bar__title {
margin-top: 0;
}
.offer-bar__cover {
padding-top: 0;
}
.offer-bar__footer a.secondary-button--white {
color: #233448;
font-size: 20px;
}
.offer-bar__footer a.secondary-button--white:hover {
color: #ff4b00;
letter-spacing: 3px;
}
.cta-bar-v2 .section__title {
margin-bottom: 2rem;
}
.cta-bar-v2__title + .cta-bar-v2__title--sub {
font-weight: 100 !important;
}
.cta-bar-v2 {
display: block;
text-align: center;
position: relative;
padding-top: 6rem;
padding-bottom: 6rem;
background-color: #8bc7d5 !important;
}
.cta-bar-v2--blue {
background-color: #8bc7d5 !important;
}
.section--bg-hex {
background-color: #8bc7d5;
margin-top:70px;
}
/*===================
Multi-Card Group Cards
=========================*/
.card-group {
flex-wrap: wrap;
}
.card {
border-radius: 16px;
box-shadow: 0 5px 12px rgba(0, 0, 0, 0.16);
}
.card.card-group__card {
margin: 0 0.5rem;
margin-top: 50px;
position: relative;
flex: 1 0 calc(33% - 1rem);
}
.card__hex {
position: absolute;
top: -29px;
width: 55px;
transform: translateX(-50%);
left: 50%;
}
.card .card__icon {
width: 110px;
height: auto;
padding: 15px 22px 22px 22px;
position: relative;
margin-top: -73px;
background: url('/wp-content/uploads/2019/02/avi-hex-gray-outline@3x.png') center center no-repeat;
background-size: 86px ;
}
.card__title {
display: block;
color: #333;
text-align: center;
padding-top: 0px;
margin-top: 0px;
margin-bottom: 12px;
font-weight: 600;
}
.card__title--big {
font-size: 1.25rem;
font-weight: 600;
}
.card__desc h3 {
text-align: center;
font-size: 14px;
font-weight: 100;
color: #F04E23;
text-transform: uppercase;
}
.card__desc p {
font-size: 1rem;
line-height: 1.75;
}
.card__desc li{
font-size: 16px;
line-height: 24px;
margin-bottom: 1rem;
padding-left: 20px;
}
.card ul li::before {
top: 13px;
}
section.section.section--multi-card.multi-card-section.main-content.section--collapse {
padding-bottom: 0;
}
@media only screen and (max-width: 768px) {
/*==========================
* Section Spacing Adjustments
============================*/
.section {
padding-top: 3rem;
padding-bottom: 3rem;
}
.section--bg-none + .section--bg-none {
padding-top: 0;
}
.basic-content--leadin.section {
padding-bottom: 1rem;
}
.basic-content img:not(:last-child) {
margin-top: 1rem;
margin-bottom: 1rem;
}
.basic-content__title, .section__title {
margin-bottom: 1.5rem;
}
/*==========================
* Body Copy Resizing
============================*/
.basic-content--leadin p:first-of-type {
font-size: 1.125rem;
}
.main-content p, .main-content li {
font-size: 1rem;
line-height: 1.75;
}
.hero-v2 {
height: 320px;
}
.hero-v2__title {
font-size: 1.75rem;
padding-top: 0;
}
.hero-v2__subtitle {
font-size: 1.125rem;
}
.section--tabs {
display: block;
height: auto;
}
.xan .tab-group {
margin: 0 auto;
display: block;
border-left: none;
border-right: none;
padding: 10px 5px;
flex-direction: column;
background-color: #fff;
}
.xan .tab-group__tabs {
width: 100%;
max-width: 100%;
border: 0;
border-bottom: 1px solid #f6f6f6;
}
.xan .js-tab-x {
border: 0;
border-bottom: 10px solid #fff;
border-radius: 0;
padding: 10px;
text-align: center;
}
.xan .tab-group__tabs .js-tab {
background: #ffffff;
color: #333333;
font-size: 18px;
font-weight: 100;
text-transform: none;
width: 100%;
text-align: left;
box-shadow: none;
filter: none;
padding: 10px 18px 10px 40px;
margin: 6px 0;
border-bottom: none;
display: block;
}
.xan .tab-group__tabs .js-tab button {
border: none !important;
box-shadow: none;
display: block;
}
.xan .tab-group__tab--is-active {
border: 0;
color: #FF4B00;
font-weight: 600;
border-bottom: 10px solid #FF4B00;
border-radius: 0px;
}
.xan .tab-group__tab:focus {
outline: none;
display: block;
}
.xan .tab-group__tabs .js-tab::before,
.xan .tab-group__tabs .js-tab::after {
content: "";
display: none;
}
.xan .tab-group__panel {
padding: 0;
margin: 0;
width: 100%;
height: auto;
font-size: 16px;
font-weight: 100;
}
.xan .tab-group__panel ul li::before {
font-size: 1.7em;
top: 16px;
}
.xan .tab-group__panel ul li {
padding-left: 18px !important;
}
.xan .tab-group__panel--is-active {
display: block;
}
.section--tabs {
border-bottom: none;
}
.section.offer-bar {
width: 100%;
}
.offer-bar__image {
padding-top: 60px;
}
.offer-bar .two-col {
-webkit-column-count: 1;
column-count: 1;
}
}
/*================
Mobile Hide/Show
==================*/
.show-desktop,
.show-tablet {
display: none !important;
}
@media (min-width: 550px) {
.show-tablet {
display: block !important;
}
.show-mobile {
display: none !important;
}
}
@media (min-width: 768px) {
.hide-desktop.hide-desktop {
display: none;
}
}
@media (min-width: 800px) {
.show-tablet {
display: none !important;
}
.show-desktop {
display: block !important;
}
}
@media (max-width: 768px) {
.hide-mobile.hide-mobile {
display: none;
}
}
//////////////////////////////////////////////////////////////////////////////
//
// Tabs
//
//////////////////////////////////////////////////////////////////////////////
(function ($) {
// Create tabs from panels
$('.js-tab-panel-x').each(function () {
var $this = $(this);
var title = $this.attr('data-title');
var bg = $this.attr('data-bg');
var sectionTitle = $this.attr('data-section-title');
var target = $this.attr('id');
var tabGroup = $this.parent().find('.js-tab-group-x');
var tabButton =
'' +
title +
' ';
tabGroup.append(tabButton);
});
// Click handler
$('.js-tab-x').on('click', function () {
var $this = $(this);
var tabGroup = $this.parent();
var target = $this.attr('data-target');
var bg = $this.attr('data-bg');
var sectionTitle = $this.attr('data-section-title');
var tabActiveClass = 'tab-group__tab--is-active';
var panelActiveClass = 'tab-group__panel--is-active';
// Apply background image and Update the title
tabGroup
.parent()
.parent()
.css({
'background-image': 'url(' + bg + ')'
})
.find('.js-tab-section-title')
.html(sectionTitle);
// Deactivate all sibling tabs
tabGroup.find('.js-tab-x').removeClass(tabActiveClass);
// Reactivate this tab
$this.addClass(tabActiveClass);
// Deactivate all sibling panels
tabGroup.siblings('.js-tab-panel-x').removeClass(panelActiveClass);
// Reactivate this panel
$('#' + target).addClass(panelActiveClass);
});
$('.tab-group .js-tab-x:first-child').trigger('click');
})(jQuery);;
.card.card-group__card {
flex: 1 0 calc(50% - 1rem);
}