限制网状网中的Istio服务

时间:2019-02-05 18:27:56

标签: kubernetes google-kubernetes-engine istio

我们有一个应用程序,其中有多个服务在k8s中运行。我们希望将它们移动到具有mTLS的Istio网格中,在这种情况下,它们都可以彼此通信(直到此处进行测试)。现在,我需要范围内限制某些服务,使其只能与一项服务进行通话。尝试与未经授权的其他服务进行通话,应予以阻止。这可能吗?

由于我无法配置请求的“源”,并且在网格内,任何人都可以与任何人交谈,所以我不能这样做。

3 个答案:

答案 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;
}