Hi, I'm Brendan and I'm going to talk today about creating Kubernetes build pipelines.

Well, obviously when you're talking about deploying a container to Kubernetes, you know you have two things.

Over here you have a container image, and over here you have a Kubernetes cluster.

What we're going to cover today really is how do you get all the way from one to the other and how do you connect the pieces together? In reality, actually you don't even necessarily start with a container image.

You actually start with source code.

So you're going to have source code in a Git Repository somewhere and you have your Kubernetes cluster over here.

Now, you're going to have a Container Registry.

Probably that's up in the cloud like the Azure Container Registry or whatever Container Registry you happen to be using.

What you're going to be thinking about is, how do you control access to pushing images into that registry and how do you configure your cluster to only pull images from that registry? So the first thing we'll talk about is, how do I set up my Kubernetes cluster so that it only uses images from the Azure Container Registry? Well, the right way to think about doing this, is Kubernetes has something that's called an Admissions Controller.

An Admissions Controller is basically a little piece of code that you can run that runs when every request comes into the cluster to validate that request.

In this particular case what we're going to validate is that the image field for any container starts with myregistry.acr.io.

All right.

So every image has to be this and then slash star.

This ensures that only containers that are created and pushed into this Azure Container Registry can be executed on this Kubernetes cluster.

That's great for image provenance, for security and ensuring you understand where all of the images in your cluster come from.

Now, writing your own Admission Controller is not too complicated but it can be a little bit daunting and so we've actually also created a Kubernetes Policy Controller which is an easy to use implementation of one of these Admissions Controllers that you can use to implement policies like this or many other sorts of compliance and other sorts of rules that you want to apply to every object that's created in your cluster.

All right.

So by using this admission controller, we've ensured that only images from our repository are flowing into Kubernetes.

But what else do we need to do? Well obviously we've got a build pipeline that's listening to our source control and it's going to build images.

So it's going to turn this into the container image.

Now what we're going to think about is, well, who has the accolades, who has the permissions to write into the Azure Container Registry? Well in reality, you want that key to only be present in your build pipeline.

Nobody except for your build pipeline should have permissions to push containers into your registry.

Remembering of course that we've restricted who can pull images in your cluster to this registry.

So anyone who has keys to push images in effectively has permissions to run things inside of your cluster.

Giving that privilege to your in-developers doesn't really make sense because it enables them to run arbitrary containers not just containers that you know I've been through your build pipeline.

So we'll take the key to your Azure Container Registry and we'll place it only in the build pipeline.

That means that the build pipeline has the ability to push images into your registry but nobody else does.

Likewise, when you're thinking about setting up the accolades over here to create containers, to create pods you also want those keys to be present in your build environment and nowhere else.

Because again once that container image has been built the only one want you want to be actually creating new containers, creating new applications in your environment is that the build pipeline as well.

It's applying the right testing, it's applying the right security scanning, image scanning, vulnerability scanning.

So, there's a lot of privilege that you're actually applying to this build pipeline.

So of course you want to be very careful about the accolades that you applied to the build pipeline and in fact a best practices to ensure that everything has to be checked in in order to be pushed through the build pipeline.

This ensures that things like code review and unit testing which are part of what it means to merge code are always applied to the things that you build and push into the registry and deploy into your cluster.

Likewise, inside of that build pipeline, it's really great to have a bunch of different compliance pieces.

This includes things like vulnerability scanning for libraries that may have vulnerabilities, credential scanning for users who have placed database passwords, certificates or other privileged information into the code, as well as things like integration testing that ensure that you have a reliable application you're deploying out into your cluster.

So ultimately, I hope this gives you a good picture about how you can put together users up here via code review submitting code with no other permissions building, pushing images through a pipeline all the way out to deploying your application to a production Kubernetes cluster.


안녕하세요. 저는 Brendan입니다. 오늘 Kubernetes 빌드 파이프 라인 생성에 대해 이야기하겠습니다.

물론 Kubernetes에 컨테이너를 배포하는 것에 대해 이야기 할 때 두 가지가 있음을 알고 있습니다.

여기에는 컨테이너 이미지가 있고 여기에는 Kubernetes 클러스터가 있습니다.

오늘 우리가 다룰 내용은 실제로 어떻게 하나에서 다른 것으로 끝까지 이동하고 조각을 어떻게 연결합니까? 실제로 실제로 컨테이너 이미지로 시작하지 않아도됩니다.

실제로 소스 코드로 시작합니다.

따라서 어딘가에 Git Repository에 소스 코드가 있고 여기에 Kubernetes 클러스터가 있습니다.

이제 Container Registry가 생겼습니다.

아마도 Azure Container Registry 또는 사용중인 Container Registry와 같은 클라우드에있을 것입니다.

여러분이 생각할 것은 이미지를 해당 레지스트리로 푸시하기위한 액세스를 제어하는 ​​방법과 해당 레지스트리에서 이미지 만 가져 오도록 클러스터를 구성하는 방법입니다. 첫 번째로 이야기 할 것은 Azure Container Registry의 이미지 만 사용하도록 Kubernetes 클러스터를 설정하는 방법입니다. 이 작업에 대해 생각하는 올바른 방법은 Kubernetes에 Admissions Controller라는 것이 있다는 것입니다.

Admissions Controller는 기본적으로 모든 요청이 해당 요청의 유효성을 검사하기 위해 클러스터에 들어올 때 실행할 수있는 작은 코드 조각입니다.

이 특별한 경우에서 우리가 검증 할 것은 모든 컨테이너의 이미지 필드가 myregistry.acr.io로 시작한다는 것입니다.

괜찮아.

따라서 모든 이미지는 이것이어야하고 별표를 슬래시해야합니다.

이렇게하면 생성되고이 Azure Container Registry로 푸시 된 컨테이너 만이 Kubernetes 클러스터에서 실행될 수 있습니다.

이는 이미지 출처, 보안 및 클러스터의 모든 이미지의 출처를 이해하는 데 적합합니다.

이제 자신의 Admission Controller를 작성하는 것이 너무 복잡하지는 않지만 약간 어려울 수 있으므로 실제로 구현하는 데 사용할 수있는 이러한 Admissions Controller 중 하나를 사용하기 쉬운 구현 인 Kubernetes Policy Controller도 만들었습니다. 이와 같은 정책 또는 클러스터에서 생성 된 모든 객체에 적용하려는 다른 종류의 규정 준수 및 기타 규칙.

괜찮아.

따라서이 승인 컨트롤러를 사용하여 저장소의 이미지 만 Kubernetes로 유입되도록했습니다.

하지만 우리는 또 무엇을해야합니까? 분명히 소스 제어를 듣고 이미지를 빌드하는 빌드 파이프 라인이 있습니다.

그래서 이것을 컨테이너 이미지로 바꿀 것입니다.

이제 우리가 생각할 것은 누가 칭찬을 받았는지, 누가 Azure Container Registry에 쓸 수있는 권한이 있는지에 대한 것입니다. 실제로는 해당 키가 빌드 파이프 라인에만 존재하기를 원합니다.

빌드 파이프 라인을 제외한 누구도 컨테이너를 레지스트리로 푸시 할 권한이 없어야합니다.

물론 클러스터의 이미지를이 레지스트리로 가져올 수있는 사용자를 제한했습니다.

따라서 이미지를 효과적으로 푸시 할 수있는 키가있는 사람은 누구나 클러스터 내부에서 작업을 실행할 수있는 권한이 있습니다.

개발자 내부에 권한을 부여하는 것은 개발자가 빌드 파이프 라인을 통과 한 것으로 알고있는 컨테이너뿐만 아니라 임의의 컨테이너를 실행할 수 있기 때문에 의미가 없습니다.

따라서 Azure Container Registry의 키를 가져 와서 빌드 파이프 라인에만 배치합니다.

즉, 빌드 파이프 라인은 이미지를 레지스트리로 푸시 할 수 있지만 다른 사람은 할 수 없습니다.

마찬가지로 컨테이너를 생성하기 위해 여기에서 영예를 설정하려고 할 때 포드를 생성하려면 해당 키가 빌드 환경에 존재하고 다른 곳에 존재하지 않기를 원합니다.

다시 한번 컨테이너 이미지가 빌드되면 실제로 새 컨테이너를 만들고자하는 유일한 것이기 때문에 환경에서 새 애플리케이션을 만드는 것도 빌드 파이프 라인입니다.

올바른 테스트를 적용하고 올바른 보안 스캔, 이미지 스캔, 취약성 스캔을 적용하고 있습니다.

따라서이 빌드 파이프 라인에 실제로 적용하는 많은 권한이 있습니다.

따라서 물론 빌드 파이프 라인에 적용한 찬사와 실제로 빌드 파이프 라인을 통해 푸시하기 위해 모든 것을 확인해야하는 모범 사례에 대해 매우주의해야합니다.

이렇게하면 코드 병합의 일부인 코드 검토 및 단위 테스트와 같은 항목이 항상 빌드하고 레지스트리에 푸시하고 클러스터에 배포하는 항목에 적용됩니다.

마찬가지로, 빌드 파이프 라인 내부에 다양한 규정 준수 부분이있는 것은 정말 좋습니다.

여기에는 취약성이있을 수있는 라이브러리에 대한 취약성 스캔, 데이터베이스 암호, 인증서 또는 기타 권한있는 정보를 코드에 넣은 사용자에 대한 자격 증명 스캔, 신뢰할 수있는 애플리케이션이 있는지 확인하는 통합 테스트 등이 포함됩니다. 클러스터에 배포합니다.

따라서 궁극적으로 다른 권한 구축없이 코드를 제출하고 파이프 라인을 통해 애플리케이션을 프로덕션 Kubernetes 클러스터에 배포하는 데까지 이미지를 푸시하는 코드 검토를 통해 여기에 사용자를 모을 수있는 방법에 대한 좋은 그림을 제공하기를 바랍니다.

  • No labels
Write a comment…