我们有一个应用程序,其中有多个服务在k8s中运行。我们希望将它们移动到具有mTLS的Istio网格中,在这种情况下,它们都可以彼此通信(直到此处进行测试)。现在,我需要在范围内限制某些服务,使其只能与一项服务进行通话。尝试与未经授权的其他服务进行通话,应予以阻止。这可能吗?
由于我无法配置请求的“源”,并且在网格内,任何人都可以与任何人交谈,所以我不能这样做。
答案 0 :(得分:0)
不是"Micro-Segmentation with Istio Authorization"所要查找的内容,尤其是在'Combinations of Attributes'下,基于source.namespace,source.principal,您有不同的细分方式。看过很少有展示这些功能的演示,但是没有亲自使用它们
答案 1 :(得分:0)
下一版Istio中的一项新功能可能会解决您的问题。 Istio 1.1将包括一个新的Sidecar
资源,该资源可用于配置服务的特使Sidecar代理。您应该能够配置服务中的出口,以便它们只能访问允许其调用的一项服务。
初步文档在这里:https://preliminary.istio.io/docs/reference/config/istio.networking.v1alpha3/#Sidecar
答案 2 :(得分:0)
Istio可以基于Mixer中可用的任何属性来控制对服务的访问。所以 您正在寻找的是Mixer denier adapter - sample denials
例如:
“拒绝从server1(s1)到server2(s2)的所有调用”
LRESULT CALLBACK obgpf_DefaultWindowCallback(HWND window, UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT result = 0;
static bool fResized = false;
static bool fInSizeLoop = false;
switch(message)
{
case WM_CLOSE:
{
PostMessageA(window, WM_QUIT, 0, 0);
} break;
//this should be handled by OBGGetEvent
case OBG_WM_RESIZE:
{
printf("MESSAGE WENT THROUGH. DON'T WANT THIS\n");
} break;
case WM_SIZE:
{
if (fInSizeLoop) // in modal size loop, defer notification
fResized = true;
else
PostMessageA(window, OBG_WM_RESIZE, wParam, lParam);
} break;
case WM_ENTERSIZEMOVE:
fInSizeLoop = true; // begin modal size loop
break;
case WM_EXITSIZEMOVE:
fInSizeLoop = false; // left modal size loop
// post resize notification now
if (fResized) {
RECT rc;
GetClientRect(window, &rc);
PostMessageA(window, OBG_WM_RESIZE, 0, MAKELPARAM(rc.right - rc.left, rc.bottom - rc.top));
fResized = false;
}
break;
default:
{
result = DefWindowProc(window, message, wParam, lParam);
} break;
}
return result;
}