Hey, I'm Brendan and today we're going to talk about service mesh.

So when we think about technologies, containers and container orchestration sort of came first.

So one of the things that came after was the idea of a Service Mesh, and I want to explain to people how it works and why you might consider using it.

So traditionally, when we think about Load Balancing, we think about North-South load balancing.

Meaning, I have a user out here somewhere and they put traffic into gateway of some story.

This might be an ingress in Kubernetes and that leads down to your pods.

What a service mesh is actually talking about is more like East-West Load balancing.

Which means, I have a service here s1, and I want to talk to some other service, S2.

How do I make traffic go between those two things? Now, when you're talking about the mesh itself, there's a couple of different values that it brings to the table.

The first is, that many of these meshes install as side cards.

So if you imagine you have your main pod, you have your app container and then you have a mesh side card, there is a separate container within the same pod and they talk to each other at local host.

Now what this means is that as an application developer, I don't actually necessarily have to link something in, I don't have to think very much about how to integrate the service mesh into my application, I just add it's container to my pod definition and the services show up automatically.

Because this is all happening on local host, I don't need to worry about certificates, or any other kind of authentication, because the network traffic is all limited to the inside of the pod.

So you can let the app developer focus on developing their app, let the service mesh take care of sort of proxying traffic out to the rest of the world.

Now, what are the sort of main characteristics that a service mesh provides to you as an application developer? Well, there's three.

The first is a notion of authorization which basically says service authorization.

Which basically says, "Well, if I'm service one, can I talk to service two".

On the other side, If I'm service one, can service three talk to me.

So the service mesh can allow you to in a declarative way define the services that are allowed to talk to your service, and the services that your services are allowed to talk to.

That's pretty useful in terms of establishing least privilege, and other sorts of access control in the building of your application.

It's also actually really useful in terms of preventing accidents.

Because you can't have a development service accidentally put too much traffic onto your production instance.

So if auth is the first thing that a service mesh provides, the second thing that a service mesh provides is the idea of experiments or canary.

So if I'm service one and I'm going to talk to service two, there may be two different versions of service two.

Their may be service two and there may be service V2 which is the next version of the service that I'm going to roll out.

Now I might want to do an experiment and say, "I want 99 percent of my traffic to go to the production ".

I know it works version of service two, but I want to do a one percent experiment to send traffic to this other version.

To test for a while.

Maybe it's to see if it works correctly.

Maybe there's a new implementation down here, you want to make sure it's still performing.

There's a variety of reasons why you might want to do this sort of Canary testing to minimize the impact of any change that you might make before you complete a roll out.

The service mesh actually enables you to do that.

Because again over here in this side car, it's proxying for you, and when it's doing that proxy, it can send 99 percent of the traffic in one direction, and one percent of the traffic in the other.

What's important is the application doesn't even know the difference.

You didn't have to reconfigure application at all in order to achieve this kind of experimentation.

The third thing that the service mesh provides for you is that if you have your app and you have the service mesh, and it's talking through that proxy, this proxy can actually collect a lot of metrics.

It can collect metrics like latency, like HTTP errors, user agents, and many other metrics that are useful to you, and then push those things into a metric server like Azure Monitoring, or open source project like Prometheus.

So you can actually, without instrumenting your application at all, you can actually get really targeted metrics about.

If you're throwing 500s, how long is a particular request taking, what kind of clients are talking to you? Again, without modifying your code at all and simply by adding in the service mesh side car.

Now when we talk about actually using a service mesh, the interesting question is, well, what APIs should I use? One of the things we've developed in conjunction with a variety of other people in the container space is this idea of the service mesh Interface, or SMI.

The SMI is a collection of APIs that register themselves with Kubernetes.

Then there are providers that implement those things.

So you can have consul implement those APIs.

You can have Istio implement those APIs.

You can have Linkerd implement those APIs.

What this allows you to do is standardize tooling and your own production experience on top of an API that isn't tightly bound to any particular implementation.

Which means that in different environments, perhaps in Azure versus on the Edge, you can make different decisions.

Or if you come to a place where a particular implementation isn't working for you, or you can't get support for it, you can switch implementations without having to rebuild your entire system.

So hopefully that gives you a perspective about how service meshes can help you build more reliable applications, and how you can use SMI to implement that service mesh.


안녕하세요, 저는 Brendan입니다. 오늘은 서비스 메시에 대해 이야기하겠습니다.

그래서 우리가 기술, 컨테이너, 컨테이너 오케스트레이션에 대해 생각할 때 가장 먼저 왔습니다.

그래서 그 이후에 나온 것 중 하나는 Service Mesh의 아이디어였습니다. 저는 사람들에게 그것이 어떻게 작동하는지 그리고 왜 그것을 사용을 고려할 수 있는지 설명하고 싶습니다.

따라서 전통적으로로드 밸런싱에 대해 생각할 때 북-남로드 밸런싱에 대해 생각합니다.

의미, 여기 어딘가에 사용자가 있고 그들은 트래픽을 어떤 이야기의 게이트웨이로 보냅니다.

이는 Kubernetes의 수신 일 수 있으며 팟 (Pod)으로 이어집니다.

서비스 메시가 실제로 말하는 것은 동서로드 밸런싱과 비슷합니다.

즉, 여기에 s1 서비스가 있고 다른 서비스 S2와 이야기하고 싶습니다.

이 두 가지 사이에 트래픽을 보내려면 어떻게합니까? 이제 메시 자체에 대해 이야기 할 때 테이블에 가져 오는 몇 가지 다른 값이 있습니다.

첫 번째는 이러한 메시 중 많은 부분이 측면 카드로 설치된다는 것입니다.

따라서 메인 포드가 있고 앱 컨테이너가 있고 메쉬 사이드 카드가 있다고 상상하면 동일한 포드 내에 별도의 컨테이너가 있으며 로컬 호스트에서 서로 통신합니다.

이제 이것이 의미하는 바는 애플리케이션 개발자로서 실제로 무언가를 링크 할 필요가 없으며 서비스 메시를 애플리케이션에 통합하는 방법에 대해 많이 생각할 필요가 없으며 컨테이너를 내 애플리케이션에 추가하기 만하면됩니다. 포드 정의 및 서비스가 자동으로 표시됩니다.

이것은 모두 로컬 호스트에서 발생하기 때문에 네트워크 트래픽이 모두 포드 내부로 제한되기 때문에 인증서 또는 다른 종류의 인증에 대해 걱정할 필요가 없습니다.

따라서 앱 개발자가 앱 개발에 집중하고 서비스 메시가 나머지 세계로 나가는 일종의 프록시 트래픽을 처리하도록 할 수 있습니다.

이제 서비스 메시가 애플리케이션 개발자에게 제공하는 주요 특성은 무엇입니까? 글쎄, 세 가지가있다.

첫 번째는 기본적으로 서비스 인증을 말하는 인증 개념입니다.

기본적으로 "글쎄, 내가 서비스 1 인 경우 서비스 2와 대화 할 수 있을까?"라고 말합니다.

반면에 내가 서비스 1이라면 서비스 3이 나에게 말할 수 있습니다.

따라서 서비스 메시를 사용하면 서비스와 통신 할 수있는 서비스와 서비스가 통신 할 수있는 서비스를 선언적 방식으로 정의 할 수 있습니다.

이는 최소 권한을 설정하고 애플리케이션을 빌드 할 때 다른 종류의 액세스 제어를 설정하는 데 매우 유용합니다.

또한 사고 예방 측면에서도 실제로 유용합니다.

개발 서비스가 실수로 프로덕션 인스턴스에 너무 많은 트래픽을 넣을 수 없기 때문입니다.

따라서 인증이 서비스 메시가 제공하는 첫 번째 항목 인 경우 서비스 메시가 제공하는 두 번째 항목은 실험 또는 카나리아의 아이디어입니다.

그래서 제가 서비스 1이고 서비스 2에 대해 이야기하려고한다면, 서비스 2의 두 가지 버전이있을 수 있습니다.

서비스 2가 될 수 있고 내가 출시 할 서비스의 다음 버전 인 서비스 V2가있을 수 있습니다.

이제 실험을하고 "내 트래픽의 99 %가 프로덕션으로 이동하고 싶습니다"라고 말할 수 있습니다.

서비스 2 버전이 작동한다는 것을 알고 있지만 트래픽을이 다른 버전으로 보내기 위해 1 % 실험을하고 싶습니다.

잠시 테스트합니다.

제대로 작동하는지 확인하는 것일 수도 있습니다.

여기에 새로운 구현이있을 수 있습니다. 여전히 작동하는지 확인해야합니다.

출시를 완료하기 전에 변경할 수있는 영향을 최소화하기 위해 이러한 종류의 카나리아 테스트를 수행하려는 이유는 다양합니다.

서비스 메시를 통해 실제로 그렇게 할 수 있습니다.

다시 여기이 사이드 카에서, 그것은 당신을 위해 프록시를하고 있고, 그 프록시를 할 때 트래픽의 99 %를 한 방향으로, 트래픽의 1 %를 다른 방향으로 보낼 수 있습니다.

중요한 것은 응용 프로그램이 차이점을 알지 못한다는 것입니다.

이러한 종류의 실험을 수행하기 위해 애플리케이션을 전혀 재구성 할 필요가 없었습니다.

서비스 메시가 제공하는 세 번째 기능은 앱이 있고 서비스 메시가 있고 해당 프록시를 통해 통신하는 경우이 프록시가 실제로 많은 메트릭을 수집 할 수 있다는 것입니다.

HTTP 오류, 사용자 에이전트 및 유용한 기타 여러 메트릭과 같은 대기 시간과 같은 메트릭을 수집 한 다음 이러한 항목을 Azure Monitoring과 같은 메트릭 서버 또는 Prometheus와 같은 오픈 소스 프로젝트로 푸시 할 수 있습니다.

따라서 실제로 응용 프로그램을 전혀 계측하지 않고도 실제로 대상 메트릭을 얻을 수 있습니다.

500 초를 던지는 경우 특정 요청에 시간이 얼마나 걸리나요? 어떤 종류의 클라이언트가 당신과 대화하고 있습니까? 다시 말하지만, 코드를 전혀 수정하지 않고 서비스 메시 사이드 카를 추가하기 만하면됩니다.

이제 실제로 서비스 메시를 사용하는 것에 대해 이야기 할 때 흥미로운 질문은 어떤 API를 사용해야합니까? 컨테이너 공간에서 다양한 다른 사람들과 함께 개발 한 것 중 하나는 서비스 메시 인터페이스 (SMI)라는 아이디어입니다.

SMI는 Kubernetes에 자신을 등록하는 API 모음입니다.

그런 다음 이러한 것들을 구현하는 공급자가 있습니다.

따라서 영사에게 이러한 API를 구현하도록 할 수 있습니다.

Istio가 이러한 API를 구현하도록 할 수 있습니다.

Linkerd가 이러한 API를 구현하도록 할 수 있습니다.

이를 통해 특정 구현과 밀접하게 관련되지 않은 API를 기반으로 도구 및 자체 프로덕션 환경을 표준화 할 수 있습니다.

즉, Azure와 Edge의 서로 다른 환경에서 서로 다른 결정을 내릴 수 있습니다.

또는 특정 구현이 작동하지 않거나 지원을받을 수없는 경우 전체 시스템을 다시 빌드하지 않고도 구현을 전환 할 수 있습니다.

따라서 서비스 메시가보다 안정적인 애플리케이션을 구축하는 데 어떻게 도움이되는지, SMI를 사용하여 해당 서비스 메시를 구현하는 방법에 대한 관점을 제공하기를 바랍니다.

  • No labels

0 Comments

You are not logged in. Any changes you make will be marked as anonymous. You may want to Log In if you already have an account.