{"componentChunkName":"component---src-templates-blog-post-js","path":"/post/setting-up-a-multi-tenant-aws-eks-cluster","result":{"data":{"headerImage":{"childImageSharp":{"fluid":{"aspectRatio":3.3992537313432836,"src":"/static/b72d38f0a9a131a445c0798c8f11b233/85c19/blog-post-intro.png","srcSet":"/static/b72d38f0a9a131a445c0798c8f11b233/c95ef/blog-post-intro.png 911w,\n/static/b72d38f0a9a131a445c0798c8f11b233/6d938/blog-post-intro.png 1822w,\n/static/b72d38f0a9a131a445c0798c8f11b233/85c19/blog-post-intro.png 3635w","srcWebp":"/static/b72d38f0a9a131a445c0798c8f11b233/bbedc/blog-post-intro.webp","srcSetWebp":"/static/b72d38f0a9a131a445c0798c8f11b233/8f106/blog-post-intro.webp 911w,\n/static/b72d38f0a9a131a445c0798c8f11b233/4b1a2/blog-post-intro.webp 1822w,\n/static/b72d38f0a9a131a445c0798c8f11b233/bbedc/blog-post-intro.webp 3635w","sizes":"(max-width: 3635px) 100vw, 3635px"}}},"relatedPosts":{"nodes":[{"fields":{"slug":"/blog-aws-kubernetes/"},"frontmatter":{"url":"aws-kubernetes/part-1","title":"The State of Kubernetes in AWS: Persistent Data Storage, Application Engineering and More","description":"When it comes to orchestrating containerized workloads, there are several options in the market, with [Kubernetes](https://kubernetes.io) being the most adopted and sought-after solution.","tags":["AWS","Kubernetes"],"date":"2022-12-20T16:44:23.317Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.5,"src":"/static/eb8228db77951dd583fd607fb3b3d3bd/836e2/kubernetes-and-aws.jpg","srcSet":"/static/eb8228db77951dd583fd607fb3b3d3bd/6e81a/kubernetes-and-aws.jpg 120w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/fbe0e/kubernetes-and-aws.jpg 240w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/836e2/kubernetes-and-aws.jpg 480w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/94285/kubernetes-and-aws.jpg 720w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/b1cc5/kubernetes-and-aws.jpg 960w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/097fa/kubernetes-and-aws.jpg 1920w","srcWebp":"/static/eb8228db77951dd583fd607fb3b3d3bd/35871/kubernetes-and-aws.webp","srcSetWebp":"/static/eb8228db77951dd583fd607fb3b3d3bd/83552/kubernetes-and-aws.webp 120w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/2b5a3/kubernetes-and-aws.webp 240w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/35871/kubernetes-and-aws.webp 480w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/9754a/kubernetes-and-aws.webp 720w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/fcc10/kubernetes-and-aws.webp 960w,\n/static/eb8228db77951dd583fd607fb3b3d3bd/30cf3/kubernetes-and-aws.webp 1920w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/kubernetes-node-management/"},"frontmatter":{"url":"karpenter","title":"Karpenter - A New Way to Manage Kubernetes Node Groups","description":"One of the most common discussions that happen when adopting Kubernetes is around autoscaling. You can autoscale your workloads horizontally or vertically, but the main challenge has always been the nodes.\n","tags":["Kubernetes","AWS"],"date":"2022-01-20T00:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.9047619047619047,"src":"/static/e0d4e328e64d982af16b722b7165263b/b460a/aws-karpenter.png","srcSet":"/static/e0d4e328e64d982af16b722b7165263b/d966b/aws-karpenter.png 120w,\n/static/e0d4e328e64d982af16b722b7165263b/67196/aws-karpenter.png 240w,\n/static/e0d4e328e64d982af16b722b7165263b/b460a/aws-karpenter.png 480w,\n/static/e0d4e328e64d982af16b722b7165263b/9a8d7/aws-karpenter.png 720w,\n/static/e0d4e328e64d982af16b722b7165263b/6e898/aws-karpenter.png 960w,\n/static/e0d4e328e64d982af16b722b7165263b/6050d/aws-karpenter.png 1200w","srcWebp":"/static/e0d4e328e64d982af16b722b7165263b/35871/aws-karpenter.webp","srcSetWebp":"/static/e0d4e328e64d982af16b722b7165263b/83552/aws-karpenter.webp 120w,\n/static/e0d4e328e64d982af16b722b7165263b/2b5a3/aws-karpenter.webp 240w,\n/static/e0d4e328e64d982af16b722b7165263b/35871/aws-karpenter.webp 480w,\n/static/e0d4e328e64d982af16b722b7165263b/9754a/aws-karpenter.webp 720w,\n/static/e0d4e328e64d982af16b722b7165263b/fcc10/aws-karpenter.webp 960w,\n/static/e0d4e328e64d982af16b722b7165263b/9000d/aws-karpenter.webp 1200w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/aws-kubernetes-part-2/"},"frontmatter":{"url":"aws-kubernetes/part-2","title":"The Current State of Kubernetes on AWS: Kubernetes Security, Scalability, Performance Engineering & More, Part 2","description":"In the first part of our two-part post on the current state of Kubernetes in AWS, we discussed how Kubernetes can help you handle stateful workloads with persistent data storage and standardize your application and data engineering approaches.","tags":["AWS","Kubernetes"],"date":"2021-12-09T08:30:41.061Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.5,"src":"/static/dddeb31efb8e1c04a57b32e10aa14653/836e2/kubernetes-security.jpg","srcSet":"/static/dddeb31efb8e1c04a57b32e10aa14653/6e81a/kubernetes-security.jpg 120w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/fbe0e/kubernetes-security.jpg 240w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/836e2/kubernetes-security.jpg 480w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/94285/kubernetes-security.jpg 720w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/b1cc5/kubernetes-security.jpg 960w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/097fa/kubernetes-security.jpg 1920w","srcWebp":"/static/dddeb31efb8e1c04a57b32e10aa14653/35871/kubernetes-security.webp","srcSetWebp":"/static/dddeb31efb8e1c04a57b32e10aa14653/83552/kubernetes-security.webp 120w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/2b5a3/kubernetes-security.webp 240w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/35871/kubernetes-security.webp 480w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/9754a/kubernetes-security.webp 720w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/fcc10/kubernetes-security.webp 960w,\n/static/dddeb31efb8e1c04a57b32e10aa14653/30cf3/kubernetes-security.webp 1920w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/smb-cloud-adoption/"},"frontmatter":{"url":"smb-cloud-adoption","title":"How to Streamline & Accelerate Your SMB Cloud Adoption","description":"The most successful businesses in today's fast-changing, digitally fueled society are those who take advantage of innovation and are data-driven. However, small and midsize businesses (SMBs) typically have fewer resources to fund the significant upfront investment that is often required to innovate, putting them at a disadvantage.","tags":["AWS","SMB","Cloud Adoption solution"],"date":"2021-10-20T19:15:51.989Z","image":{"childImageSharp":{"fluid":{"aspectRatio":2.3076923076923075,"src":"/static/f00f7616828543f0112e7c8aa9c08b01/836e2/smb-cloud-adoption.jpg","srcSet":"/static/f00f7616828543f0112e7c8aa9c08b01/6e81a/smb-cloud-adoption.jpg 120w,\n/static/f00f7616828543f0112e7c8aa9c08b01/fbe0e/smb-cloud-adoption.jpg 240w,\n/static/f00f7616828543f0112e7c8aa9c08b01/836e2/smb-cloud-adoption.jpg 480w,\n/static/f00f7616828543f0112e7c8aa9c08b01/94285/smb-cloud-adoption.jpg 720w,\n/static/f00f7616828543f0112e7c8aa9c08b01/b1cc5/smb-cloud-adoption.jpg 960w,\n/static/f00f7616828543f0112e7c8aa9c08b01/097fa/smb-cloud-adoption.jpg 1920w","srcWebp":"/static/f00f7616828543f0112e7c8aa9c08b01/35871/smb-cloud-adoption.webp","srcSetWebp":"/static/f00f7616828543f0112e7c8aa9c08b01/83552/smb-cloud-adoption.webp 120w,\n/static/f00f7616828543f0112e7c8aa9c08b01/2b5a3/smb-cloud-adoption.webp 240w,\n/static/f00f7616828543f0112e7c8aa9c08b01/35871/smb-cloud-adoption.webp 480w,\n/static/f00f7616828543f0112e7c8aa9c08b01/9754a/smb-cloud-adoption.webp 720w,\n/static/f00f7616828543f0112e7c8aa9c08b01/fcc10/smb-cloud-adoption.webp 960w,\n/static/f00f7616828543f0112e7c8aa9c08b01/30cf3/smb-cloud-adoption.webp 1920w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/public-sector-cloud-adoption/"},"frontmatter":{"url":"public-sector-cloud-adoption","title":"How to Transform Your Public Sector Organization with Cloud Adoption      ","description":"Whether you work in government, education, non-profit, or healthcare, we know that your public sector organization is unique - and so are its challenges, from budgetary restrictions to significant governance, security and compliance requirements.","tags":["Public Sector","AWS"],"date":"2021-08-12T20:38:56.252Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.791044776119403,"src":"/static/c010c944ab047a7187b81b6ba82a74b9/836e2/shutterstock_1724551933.jpg","srcSet":"/static/c010c944ab047a7187b81b6ba82a74b9/6e81a/shutterstock_1724551933.jpg 120w,\n/static/c010c944ab047a7187b81b6ba82a74b9/fbe0e/shutterstock_1724551933.jpg 240w,\n/static/c010c944ab047a7187b81b6ba82a74b9/836e2/shutterstock_1724551933.jpg 480w,\n/static/c010c944ab047a7187b81b6ba82a74b9/94285/shutterstock_1724551933.jpg 720w,\n/static/c010c944ab047a7187b81b6ba82a74b9/b1cc5/shutterstock_1724551933.jpg 960w,\n/static/c010c944ab047a7187b81b6ba82a74b9/4af19/shutterstock_1724551933.jpg 6518w","srcWebp":"/static/c010c944ab047a7187b81b6ba82a74b9/35871/shutterstock_1724551933.webp","srcSetWebp":"/static/c010c944ab047a7187b81b6ba82a74b9/83552/shutterstock_1724551933.webp 120w,\n/static/c010c944ab047a7187b81b6ba82a74b9/2b5a3/shutterstock_1724551933.webp 240w,\n/static/c010c944ab047a7187b81b6ba82a74b9/35871/shutterstock_1724551933.webp 480w,\n/static/c010c944ab047a7187b81b6ba82a74b9/9754a/shutterstock_1724551933.webp 720w,\n/static/c010c944ab047a7187b81b6ba82a74b9/fcc10/shutterstock_1724551933.webp 960w,\n/static/c010c944ab047a7187b81b6ba82a74b9/d486d/shutterstock_1724551933.webp 6518w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/automate-deployment-to-aws-with-github-actions/"},"frontmatter":{"url":"automate-deployment-to-aws-with-github-actions","title":"Automate Deployment to AWS with GitHub Actions","description":"In previous posts we have looked at the popularity of GitOps and a number of tools available to implement GitOps. Among the tools there are GitHub Actions. Given the popularity of GitHub in both enterprises and open-sourced communities, let's walk through how to set up the new feature; GitHub Actions.","tags":["AWS","DevOps"],"date":"2020-02-18T17:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.5,"src":"/static/671506745a2600616b877b8ba95908eb/836e2/github-actions-blog.jpg","srcSet":"/static/671506745a2600616b877b8ba95908eb/6e81a/github-actions-blog.jpg 120w,\n/static/671506745a2600616b877b8ba95908eb/fbe0e/github-actions-blog.jpg 240w,\n/static/671506745a2600616b877b8ba95908eb/836e2/github-actions-blog.jpg 480w,\n/static/671506745a2600616b877b8ba95908eb/94285/github-actions-blog.jpg 720w,\n/static/671506745a2600616b877b8ba95908eb/b1cc5/github-actions-blog.jpg 960w,\n/static/671506745a2600616b877b8ba95908eb/41bee/github-actions-blog.jpg 5200w","srcWebp":"/static/671506745a2600616b877b8ba95908eb/35871/github-actions-blog.webp","srcSetWebp":"/static/671506745a2600616b877b8ba95908eb/83552/github-actions-blog.webp 120w,\n/static/671506745a2600616b877b8ba95908eb/2b5a3/github-actions-blog.webp 240w,\n/static/671506745a2600616b877b8ba95908eb/35871/github-actions-blog.webp 480w,\n/static/671506745a2600616b877b8ba95908eb/9754a/github-actions-blog.webp 720w,\n/static/671506745a2600616b877b8ba95908eb/fcc10/github-actions-blog.webp 960w,\n/static/671506745a2600616b877b8ba95908eb/a7c71/github-actions-blog.webp 5200w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/gitops-why-is-it-relevant-now/"},"frontmatter":{"url":"gitops-why-is-it-relevant-now","title":"GitOps - Why is it Relevant Now?","description":"There seems to have been a lot of talk about GitOps just recently. This impression is certainly reinforced by the sessions and booths during KubeCon San Diego late 2019. Regardless of the discipline or services, GitOps was the keyword that was constantly repeated.","tags":["Kubernetes"],"date":"2020-01-21T17:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.3333333333333333,"src":"/static/602b397bd0ef200acbf6007f11c2f3f5/836e2/shutterstock_1019460151-1-.jpg","srcSet":"/static/602b397bd0ef200acbf6007f11c2f3f5/6e81a/shutterstock_1019460151-1-.jpg 120w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/fbe0e/shutterstock_1019460151-1-.jpg 240w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/836e2/shutterstock_1019460151-1-.jpg 480w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/94285/shutterstock_1019460151-1-.jpg 720w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/b1cc5/shutterstock_1019460151-1-.jpg 960w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/405f0/shutterstock_1019460151-1-.jpg 4856w","srcWebp":"/static/602b397bd0ef200acbf6007f11c2f3f5/35871/shutterstock_1019460151-1-.webp","srcSetWebp":"/static/602b397bd0ef200acbf6007f11c2f3f5/83552/shutterstock_1019460151-1-.webp 120w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/2b5a3/shutterstock_1019460151-1-.webp 240w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/35871/shutterstock_1019460151-1-.webp 480w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/9754a/shutterstock_1019460151-1-.webp 720w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/fcc10/shutterstock_1019460151-1-.webp 960w,\n/static/602b397bd0ef200acbf6007f11c2f3f5/cdeed/shutterstock_1019460151-1-.webp 4856w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/setting-up-a-multi-tenant-aws-eks-cluster/"},"frontmatter":{"url":"setting-up-a-multi-tenant-aws-eks-cluster","title":"Setting up a Multi-tenant Amazon EKS cluster: a few things to consider","description":"MyOps prides itself in heavy use of cloud-native technology, and Kubernetes is often the primary platform of choice to run containerized workloads. In this blog we discuss using name space, network policies, Integrating AWS IAM to EKS cluster/workloads, isolation techniques and much more.","tags":["Kubernetes","AWS"],"date":"2019-12-12T17:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.7647058823529411,"src":"/static/242e9209b664bee2a7dc6b090d3a07e1/836e2/setting-up-multi-tenant-aws-eks-cluster.jpg","srcSet":"/static/242e9209b664bee2a7dc6b090d3a07e1/6e81a/setting-up-multi-tenant-aws-eks-cluster.jpg 120w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/fbe0e/setting-up-multi-tenant-aws-eks-cluster.jpg 240w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/836e2/setting-up-multi-tenant-aws-eks-cluster.jpg 480w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/94285/setting-up-multi-tenant-aws-eks-cluster.jpg 720w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/b1cc5/setting-up-multi-tenant-aws-eks-cluster.jpg 960w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/e147c/setting-up-multi-tenant-aws-eks-cluster.jpg 5760w","srcWebp":"/static/242e9209b664bee2a7dc6b090d3a07e1/35871/setting-up-multi-tenant-aws-eks-cluster.webp","srcSetWebp":"/static/242e9209b664bee2a7dc6b090d3a07e1/83552/setting-up-multi-tenant-aws-eks-cluster.webp 120w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/2b5a3/setting-up-multi-tenant-aws-eks-cluster.webp 240w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/35871/setting-up-multi-tenant-aws-eks-cluster.webp 480w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/9754a/setting-up-multi-tenant-aws-eks-cluster.webp 720w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/fcc10/setting-up-multi-tenant-aws-eks-cluster.webp 960w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/b4d70/setting-up-multi-tenant-aws-eks-cluster.webp 5760w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/walkthrough-ecs-local/"},"frontmatter":{"url":"walkthrough-ecs-local","title":"Walkthrough - ECS Local: Bringing ECS to your local environment","description":"As someone who works with AWS on a day-to-day basis, It's important to stay up to date with all the changes and new features of the different services on the platform. That's how one recent announcement caught my eye - The new capability of local testing of ECS.","tags":["Kubernetes","AWS"],"date":"2019-09-17T16:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":2.142857142857143,"src":"/static/12224681f2fd40bf0749423e29cf8d0c/836e2/technology-education-information-handover.jpg","srcSet":"/static/12224681f2fd40bf0749423e29cf8d0c/6e81a/technology-education-information-handover.jpg 120w,\n/static/12224681f2fd40bf0749423e29cf8d0c/fbe0e/technology-education-information-handover.jpg 240w,\n/static/12224681f2fd40bf0749423e29cf8d0c/836e2/technology-education-information-handover.jpg 480w,\n/static/12224681f2fd40bf0749423e29cf8d0c/94285/technology-education-information-handover.jpg 720w,\n/static/12224681f2fd40bf0749423e29cf8d0c/b1cc5/technology-education-information-handover.jpg 960w,\n/static/12224681f2fd40bf0749423e29cf8d0c/0ff54/technology-education-information-handover.jpg 1200w","srcWebp":"/static/12224681f2fd40bf0749423e29cf8d0c/35871/technology-education-information-handover.webp","srcSetWebp":"/static/12224681f2fd40bf0749423e29cf8d0c/83552/technology-education-information-handover.webp 120w,\n/static/12224681f2fd40bf0749423e29cf8d0c/2b5a3/technology-education-information-handover.webp 240w,\n/static/12224681f2fd40bf0749423e29cf8d0c/35871/technology-education-information-handover.webp 480w,\n/static/12224681f2fd40bf0749423e29cf8d0c/9754a/technology-education-information-handover.webp 720w,\n/static/12224681f2fd40bf0749423e29cf8d0c/fcc10/technology-education-information-handover.webp 960w,\n/static/12224681f2fd40bf0749423e29cf8d0c/9000d/technology-education-information-handover.webp 1200w","sizes":"(max-width: 480px) 100vw, 480px"}}}}},{"fields":{"slug":"/opensource-data-lakes-for-the-hybrid-cloud-designing-an-oss-datalake/"},"frontmatter":{"url":"opensource-data-lakes-for-the-hybrid-cloud-designing-an-oss-datalake","title":"OpenSource Data Lake for the Hybrid Cloud - Part 2: Designing an OSS DataLake","description":"In part 1 of this series, we answered the question of WHY Open Source components are often an attractive option when building a data lake of any significant size. In this second installment, we describe HOW to cost-effectively build a data lake out of Open Source components.","tags":["Kubernetes","Big Data"],"date":"2019-08-27T16:00:00.000Z","image":{"childImageSharp":{"fluid":{"aspectRatio":1.6,"src":"/static/107087aec2d3327919bcfb2ab38201da/836e2/datalake-p2.jpg","srcSet":"/static/107087aec2d3327919bcfb2ab38201da/6e81a/datalake-p2.jpg 120w,\n/static/107087aec2d3327919bcfb2ab38201da/fbe0e/datalake-p2.jpg 240w,\n/static/107087aec2d3327919bcfb2ab38201da/836e2/datalake-p2.jpg 480w,\n/static/107087aec2d3327919bcfb2ab38201da/94285/datalake-p2.jpg 720w,\n/static/107087aec2d3327919bcfb2ab38201da/b1cc5/datalake-p2.jpg 960w,\n/static/107087aec2d3327919bcfb2ab38201da/32638/datalake-p2.jpg 6399w","srcWebp":"/static/107087aec2d3327919bcfb2ab38201da/35871/datalake-p2.webp","srcSetWebp":"/static/107087aec2d3327919bcfb2ab38201da/83552/datalake-p2.webp 120w,\n/static/107087aec2d3327919bcfb2ab38201da/2b5a3/datalake-p2.webp 240w,\n/static/107087aec2d3327919bcfb2ab38201da/35871/datalake-p2.webp 480w,\n/static/107087aec2d3327919bcfb2ab38201da/9754a/datalake-p2.webp 720w,\n/static/107087aec2d3327919bcfb2ab38201da/fcc10/datalake-p2.webp 960w,\n/static/107087aec2d3327919bcfb2ab38201da/85285/datalake-p2.webp 6399w","sizes":"(max-width: 480px) 100vw, 480px"}}}}}]},"socials":{"frontmatter":{"socials":{"linkedin":"https://www.linkedin.com/company/myops-yael","github":"https://github.com/opsguru-israel"}}},"markdownRemark":{"html":"<p>MyOps prides itself in heavy use of cloud-native technology, and Kubernetes is often the primary platform of choice to run containerized workloads. Because of its flexibility and support on bare metal, virtual machines and across all major cloud providers, Kubernetes has become the most popular container orchestration platform. The nature of the workloads have also changed: instead of being the advocated platform only for simple stateless workloads, Kubernetes is now also used for databases, machine learning workflows and a variety of complex applications.</p>\n<p>Ever since Amazon EKS has been made Generally Available since 2018, it has been noted as the first choice of running Kubernetes workloads on AWS. Hosting a Kubernetes platform on your own is complex, expensive and dubious in business value. In most cases, Amazon EKS -- the managed Kubernetes services provided by AWS -- is the unassailable choice to manage Kubernetes workloads on AWS.</p>\n<p>Amazon EKS can be especially attractive to the needs of a multi-tenant service, because the Kubernetes orchestration layer supports running drastically different workloads on the same server and therefore increasing the density on the Amazon EC2 instances. However, in order to run a SaaS application on Amazon EKS, the hygiene and security concerning multi-tenant data and access have to be considered carefully. The following are a few points that any SaaS service should consider at using Amazon EKS to run their services.</p>\n<p><img src=\"/img/aws-eks-cluster-1-1-.jpg\" alt=\"A list of AWS EKS cluster considerations.\"></p>\n<h2>Each tenant should have its own namespace</h2>\n<p><em>Namespace</em> is essential in a multi-tenant EKS cluster, where it can be used as logical boundaries separating tenants. Such boundaries are further fortified by security and policy constructs such as role-based access control (RBAC) and resource quotas (discussed below). The goal is to limit the blast radius by ensuring that only resources within the same namespace can access each other, that external entities (e.g. a user) can only access the objects when specific access to the namespace is granted. Once properly set up, the tenants of different namespaces should be protected from each other, similar to how resources in different AWS accounts are protected from each other.</p>\n<h2>Soft Isolation via ResourceQuota to avoid erosion of resources by noisy tenants</h2>\n<p>Other than resource isolation from each other, namespaces can be used to ensure resources (CPU, memory, storage … ) are fairly shared instead of being monopolised by workloads in particular namespaces. The ResourceQuota object can be used to limit the total consumption of CPU, memory, storage and number of objects of all processes within the namespace (and therefore a tenant based on the 1:1 namespace/tenant mapping). To expand on the same idea, ResourceQuota can also be used to prioritise regular and premium tenants based on the agreements made with the SaaS provider. Meanwhile, to ensure resource sharing within a namespace, LimitRange is a handy object to make sure no container can run away with resources, and the globally defined PriorityClass objects can be used to assign available resources based on the priority of the workloads.</p>\n<p><img src=\"/img/aws-eks-cluster-2-1-.jpg\" alt=\"Soft vs Hard multi-tenant AWS EKS control pane.\"></p>\n<h2>Hard Isolation via enforcing 1:1 mapping between instance groups and tenants</h2>\n<p>In the above scenario, the pods for multiple tenants share the same Amazon EC2 instances that run as nodes in the same Amazon EKS clusters. In a scenario where harder separations are needed e.g. completely separate groups of Amazon EC2 node groups, the mechanism of <em>taint,tolerations</em> and <em>nodeSelector</em> can be used to achieve that.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">tenant=A:NoSchedule\nkubectl label nodes node1 tenant=A</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span></span></pre></div>\n<p>As an example, consider a number of nodes that should only execute workloads from tenant A. The first step is to \"taint\" those nodes with a key/value pair and assign proper labels to it</p>\n<p>This taint will ensure only pods with the key/value pair (tenant,A) can run the node. The label is used to help tenant A workloads identify where they should run. While taint and label look similar, they serve different purposes.</p>\n<p>Meanwhile, the workloads should satisfy the taint requirement by containing the toleration</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">  - key: \"tenant\"\n    value: \"A\"\n    effect: \"NoSchedule\"</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span></span></pre></div>\n<p>To ensure that the workload will only run on the dedicated nodes, nodeSelector needs to be used as well, leveraging the labels that have been set earlier.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">nodeSelector:\n  tenant: A</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span></span></pre></div>\n<p>With the use of tolerations and taints, one can assign the workloads of namespace/tenant A with the proper tolerations to only nodes associated with tenant A (that are all tainted accordingly). The same toleration and taints can be applied to workloads of other talents. As a result, workloads are spread to different node groups (which are often autoscaling groups), sharing therefore only the control plane. This is a handy way to easily capture instance costs associated with tenants because billing reports with tenant-based tags on the instances is straightforward.</p>\n<p>While the above is an ideal scenario to perform hard isolation by separating nodes used by tenants, extraneous security measures will then need to be considered to avoid malicious workloads trying to run workloads on node groups associated with other tenants. A ValidatingAdmissionWebhook is one way to ensure only pods that have expected tolerations are permitted. In fact, the CNCF project <a href=\"https://www.openpolicyagent.org/\">Open Policy Agent</a> (OPA) is a good tool to support exactly that. Here is an AWS <a href=\"https://aws.amazon.com/blogs/opensource/using-open-policy-agent-on-amazon-eks/\">blog</a> on how to get OPA started on Amazon EKS.</p>\n<h2>Integrate Amazon IAM to AWS EKS Cluster to control cluster access</h2>\n<p>In earlier paragraphs, I have focused the discussion from the resource perspective, but good multi-tenant practice on Amazon EKS is heavily dependent on good security posture too. The first and foremost security practice on Amazon EKS -- particularly for a multi-tenant cluster -- is role-based access control, which can be tightly integrated with Amazon IAM.</p>\n<p>At setting up RBAC on Kubernetes, the first thing to understand is the difference between cluster-roles and roles. While cluster-role may be convenient because it is applicable to the entire cluster (a reason why many beginner tutorials of Kubernetes default cluster-admin role because of its simplicity), it is highly discouraged in a multi-tenant setup. If any entities need access to a tenanted-namespace, the namespace-specific roles should be used instead (in fact, it can be argued that it is better to set up similar roles across each of the tenanted namespaces than to set up a cross-namespace cluster role for the same functionality). AWS IAM can be easily mapped to a role in the EKS cluster. AWS has provided clear <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/managing-auth.html\">documentation</a> on the different ways to map AWS IAM credentials to an EKS cluster-role or (namespace-specific role).</p>\n<h2>Integrate AWS IAM to EKS workloads to enforce AWS resource access</h2>\n<p>AWS IAM roles are not only useful for controlling the objects in the Amazon EKS cluster, but it is necessary to control access from workloads to AWS. The usual security practice of applying AWS IAM roles to the underlying Amazon EC2 instances is insufficient because they need to include all permissions necessary to support all actions that will take place on the nodes, namely the access of all possible workloads across all tenants. In a pool of worker nodes that can run workloads of multiple tenants, it is not possible to implement tenant-specific IAM policies on the Amazon EC2 instances. In fact, even in a single-tenanted cluster, IAM roles on the Amazon EC2 nodes are inadequate as a security construct because it requires to be a super-set of all permissions needed.</p>\n<p>Since September 2019, AWS IAM has added support for EKS workloads on the pod level. This is done by first mapping namespace-specific service accounts to AWS IAM roles, then associate the service accounts with the individual pods. By doing so, you are not only using AWS IAM to control access to AWS resources by the workloads running on the EKS cluster, but also ensuring such workloads only have access to the tenant-specific resources. For example, often Amazon S3 buckets are used to store permanent data, and tenant-specific data can be stored under specific paths in the same bucket. By assigning IAM permissions to each pod running on the EKS clusters, you can ensure that there is no unintended cross-tenant data access to the data in the AWS S3 buckets, as each pod can be assigned access only associated with the tenant the pod is running with (A side note: the recent announcement of <a href=\"https://aws.amazon.com/about-aws/whats-new/2019/12/amazon-s3-access-points-manage-data-access-at-scale-shared-data-sets/\">Amazon S3 Access Points</a> look especially attractive for multi-tenant workloads).</p>\n<h2>Control Communications via Network Policies</h2>\n<p>Network policies are used to control ingress and egress permissions based on multiple criteria. For a multi-tenant EKS set up that maps tenants to namespaces, namespaceSelector and podSelector can be used to limit cross-namespace communications and even communications amongst different pods within the same namespace.</p>\n<p>Suppose there is a namespace tenantA already set up, and there is a label associated with it that is in the form of</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">kubectl label namespace/tenant-a tenant=a</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p>The following example is a network policy that allows only same-namespace traffic within the tenantA namespace getting to pods with labels \"app:api\"</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">apiVersion: networking.k8s.io/v1\nkind: NetworkPolicy\nmetadata:\n  name: same-namespace-only\n  namespace: tenant-a\nspec:\n  podSelector:\n    matchLabels:\n      app: api\n  policyTypes:\n  - ingress\n  - egress\n  ingress:\n  - from:\n    - namespaceSelector:\n        matchLabels:\n          tenant: a\n  egress:\n  - to:\n    - namespaceSelector:\n        matchLabels:\n          tenant: a</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<h2>Pod-Host Access Control to Double Assurance on Multi-tenant Security</h2>\n<p>While PodSecurityPolicy is intended to limit access to the underlying EC2 instances in an Amazon EKS cluster, by the same token it can be used to limit access the shared resources in the EC2 instances in a multi-tenant cluster.</p>\n<p>By <strong><em>not</em></strong> using pod-security policy, you are essentially implementing</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-text line-numbers\"><code class=\"language-text\">apiVersion: policy/v1beta1\nkind: PodSecurityPolicy\nmetadata:\n  name: privileged\n  annotations:\n    seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'\nspec:\n  privileged: true\n  allowPrivilegeEscalation: true\n  allowedCapabilities:\n  - '*'\n  volumes:\n  - '*'\n  hostNetwork: true\n  hostPorts:\n  - min: 0\n    max: 65535\n  hostIPC: true\n  hostPID: true\n  runAsUser:\n    rule: 'RunAsAny'\n  seLinux:\n    rule: 'RunAsAny'\n  supplementalGroups:\n    rule: 'RunAsAny'\n  fsGroup:\n    rule: 'RunAsAny'</code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>It is easy to discern, by observing all permissions granted in the volumes stanza, what security pitfalls the default policy pose. In a scenario where pods from multiple namespaces/tenants are sharing the underlying resources of the Amazon EC2 instances, not locking down access from the pod to host can mean inadvertently exposing data across tenants, if the data is stored/cached in the associated volumes.</p>\n<h2>Summary</h2>\n<p>The above is by no means a comprehensive set of rules to set up multi-tenants on Amazon EKS. However, as Amazon EKS is becoming a popular choice for hosting multi-tenant services , it is important to consider how to properly apply the resource and security boundaries between tenants to ensure functionality for the service. Amazon EKS presents many exciting possibilities -- especially with the increasing maturity of persistence data management.</p>\n<p>Are you interested in learning more about using Amazon EKS to run your multi-tenant solution?</p>\n<p>Are you wondering about other architectural design patterns applicable to multi-tenant solution on AWS? The MyOps team is ready to work with you to adopt the cloud and to optimise your workloads. Let us have a chat <a href=\"mailto:info@myops.co.il\">info@myops.co.il</a>.</p>\n<p><br>\nWritten by: MyOps Team</p>","frontmatter":{"url":"setting-up-a-multi-tenant-aws-eks-cluster","seo":{"title":"Setting up a Multi-tenant Amazon EKS cluster: a few things to consider","description":"MyOps prides itself in heavy use of cloud-native technology, and Kubernetes is often the primary platform of choice to run containerized workloads. In this blog we discuss using name space, network policies, Integrating AWS IAM to EKS cluster/workloads, isolation techniques and much more.","canonical":null,"image":{"childImageSharp":{"fluid":{"aspectRatio":1.7730496453900708,"src":"/static/242e9209b664bee2a7dc6b090d3a07e1/724c8/setting-up-multi-tenant-aws-eks-cluster.jpg","srcSet":"/static/242e9209b664bee2a7dc6b090d3a07e1/84d81/setting-up-multi-tenant-aws-eks-cluster.jpg 250w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/f0719/setting-up-multi-tenant-aws-eks-cluster.jpg 500w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/724c8/setting-up-multi-tenant-aws-eks-cluster.jpg 1000w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/d79bd/setting-up-multi-tenant-aws-eks-cluster.jpg 1500w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/a66ad/setting-up-multi-tenant-aws-eks-cluster.jpg 2000w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/e147c/setting-up-multi-tenant-aws-eks-cluster.jpg 5760w","srcWebp":"/static/242e9209b664bee2a7dc6b090d3a07e1/36ebb/setting-up-multi-tenant-aws-eks-cluster.webp","srcSetWebp":"/static/242e9209b664bee2a7dc6b090d3a07e1/1d872/setting-up-multi-tenant-aws-eks-cluster.webp 250w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/4e6d4/setting-up-multi-tenant-aws-eks-cluster.webp 500w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/36ebb/setting-up-multi-tenant-aws-eks-cluster.webp 1000w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/fd45d/setting-up-multi-tenant-aws-eks-cluster.webp 1500w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/6e77b/setting-up-multi-tenant-aws-eks-cluster.webp 2000w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/b4d70/setting-up-multi-tenant-aws-eks-cluster.webp 5760w","sizes":"(max-width: 1000px) 100vw, 1000px","maxHeight":563,"maxWidth":1000}}}},"title":"Setting up a Multi-tenant Amazon EKS cluster: a few things to consider","date":"2019-12-12T17:00:00.000Z","tags":["Kubernetes","AWS"],"author":{"name":"MyOps","photo":{"extension":"png","publicURL":"/static/3ff870573bc56665ee67e3cf3f5fc163/logo-small.png","childImageSharp":{"fluid":{"aspectRatio":0.8759124087591241,"src":"/static/3ff870573bc56665ee67e3cf3f5fc163/b460a/logo-small.png","srcSet":"/static/3ff870573bc56665ee67e3cf3f5fc163/d966b/logo-small.png 120w,\n/static/3ff870573bc56665ee67e3cf3f5fc163/67196/logo-small.png 240w,\n/static/3ff870573bc56665ee67e3cf3f5fc163/b460a/logo-small.png 480w,\n/static/3ff870573bc56665ee67e3cf3f5fc163/eec14/logo-small.png 596w","srcWebp":"/static/3ff870573bc56665ee67e3cf3f5fc163/35871/logo-small.webp","srcSetWebp":"/static/3ff870573bc56665ee67e3cf3f5fc163/83552/logo-small.webp 120w,\n/static/3ff870573bc56665ee67e3cf3f5fc163/2b5a3/logo-small.webp 240w,\n/static/3ff870573bc56665ee67e3cf3f5fc163/35871/logo-small.webp 480w,\n/static/3ff870573bc56665ee67e3cf3f5fc163/c0cb3/logo-small.webp 596w","sizes":"(max-width: 480px) 100vw, 480px"}}}},"image":{"childImageSharp":{"fluid":{"aspectRatio":1.7751479289940828,"src":"/static/242e9209b664bee2a7dc6b090d3a07e1/8c3c2/setting-up-multi-tenant-aws-eks-cluster.jpg","srcSet":"/static/242e9209b664bee2a7dc6b090d3a07e1/15aed/setting-up-multi-tenant-aws-eks-cluster.jpg 300w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/a07a5/setting-up-multi-tenant-aws-eks-cluster.jpg 600w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/8c3c2/setting-up-multi-tenant-aws-eks-cluster.jpg 1200w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/cd33f/setting-up-multi-tenant-aws-eks-cluster.jpg 1800w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/1c8c6/setting-up-multi-tenant-aws-eks-cluster.jpg 2400w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/39b7f/setting-up-multi-tenant-aws-eks-cluster.jpg 5760w","srcWebp":"/static/242e9209b664bee2a7dc6b090d3a07e1/e7405/setting-up-multi-tenant-aws-eks-cluster.webp","srcSetWebp":"/static/242e9209b664bee2a7dc6b090d3a07e1/4fec1/setting-up-multi-tenant-aws-eks-cluster.webp 300w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/483a3/setting-up-multi-tenant-aws-eks-cluster.webp 600w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/e7405/setting-up-multi-tenant-aws-eks-cluster.webp 1200w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/7f800/setting-up-multi-tenant-aws-eks-cluster.webp 1800w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/7acea/setting-up-multi-tenant-aws-eks-cluster.webp 2400w,\n/static/242e9209b664bee2a7dc6b090d3a07e1/c2be8/setting-up-multi-tenant-aws-eks-cluster.webp 5760w","sizes":"(max-width: 1200px) 100vw, 1200px"}}}}}},"pageContext":{"id":"37d4c9b1-0ace-546e-8d2f-81c799c403a1","categories":["Kubernetes","AWS"]}},"staticQueryHashes":["2022990323","639612397"]}