【问题标题】:Configure Varnish backend in kubernetes deployment在 Kubernetes 部署中配置 Varnish 后端
【发布时间】:2020-11-30 21:38:25
【问题描述】:

我正在尝试启动 Varnish 实例来加速服务的缓慢但静态的端点。该服务已经在 Kubernetes 集群中运行,因此我将设置基于官方 docker 映像并遵循将 VCL 文件烘焙到映像中的建议:

FROM varnish:6.2

COPY default.vcl /etc/varnish/

我从default.vcl中的少量配置开始:

vcl 4.0;

backend default {
        .host = "172.17.0.1:8018"; # IP for local experimentation
}

# only cache '/v1/xyz/...'
sub vcl_recv {
    if (req.url ~ "^/v1/xyz/") {
        return (hash);
    }
    return (pass);
}

我希望能够在部署文件中声明目标后端,可以使用 env vars 或 cli args。

-b 标志似乎非常适合这项工作,但 Error: Only one of -b or -f can be specified 失败。

backend 块中使用std.getenv 也不起作用:

import std;

backend default {
        .host = std.getenv("VARNISH_TAGET_HOST");
}

结果

Expected CSTR got 'std'
(program line 369), at
('/etc/varnish/default.vcl' Line 6 Pos 17)
        .host = std.getenv("VARNISH_TAGET_HOST");
----------------###------------------------------

有什么方法(不包括sed-like hacks)我可以配置后端而不将其硬编码到 VCL 中?

【问题讨论】:

    标签: kubernetes configuration varnish varnish-vcl varnish-4


    【解决方案1】:

    Varnish Enterprise 具有动态后端

    Varnish Cache,Varnish 的开源版本,只允许静态后端定义。

    即时定义后端的唯一方法是使用该软件的商业版本Varnish Enterprise

    有关动态后端功能的更多信息,请参阅https://docs.varnish-software.com/varnish-cache-plus/vmods/goto/

    为什么 -b & -f 不能组合

    显然-b 参数是以下命令的简写:

    varnishadm vcl.inline boot << EOF
    vcl 4.1;
    
    backend default {
        .host = "<addr>";
    }
    EOF
    

    所以事实上-b已经在后台创建并加载了VCL,这使得这个选项和-f互斥

    【讨论】:

    • 如果“on-the-fly”是指运行时,那么这不是我需要的。我知道启动时的后端,我只想将其配置为参数而不是硬编码。
    • 解决这个问题的唯一方法是使用 VCL 预处理器:一些脚本在启动 varnishd 之前替换 VCL 文件后端定义中的占位符。
    • 好的,谢谢。你知道这是否是故意的限制,即为什么我不能同时使用-b-f
    • 我会尽快调查的。
    • 我编辑了我的答案,并添加了一些关于 -b-f 的互斥性的更多信息。
    猜你喜欢
    • 2021-02-10
    • 2020-06-19
    • 2020-10-06
    • 1970-01-01
    • 2019-12-08
    • 2019-09-29
    • 2020-05-25
    • 2020-09-24
    • 1970-01-01
    相关资源
    最近更新 更多