【问题标题】:How should Tyk and Kubernetes be configured in for internal K8s TLS?应该如何为内部 K8s TLS 配置 Tyk 和 Kubernetes?
【发布时间】:2019-04-03 22:40:05
【问题描述】:

问题:

我正在基于TykTechnologies/tyk-kubernetes repo 配置 Tyk 网关和仪表板:

我现在希望使用 TLS 证书保护 Gateway 和 Dashboard K8s 服务。

我已经购买了一个证书来保护外部 URL(https://api.example.comhttps://dashboard.example.com),如下所示,但该证书对于内部 k8s 服务端点无效,因此仪表板和网关无法再在内部说话:

$ kubectl logs deployment/tyk-dashboard
...
time="Jan 01 00:00:00" level=error msg="Request failed with error Get https://tyk-dashboard.tyk.svc.cluster.local:443/register/node: x509: certificate is valid for *.example.com, not tyk-dashboard.tyk.svc.cluster.local; retrying in 5s"

到目前为止我做了什么:

修改tyk.conftyk_analytics.conf更改监听端口并引用证书:

{
"listen_port": 443,
"notifications_listen_port": 5000,
"tyk_api_config": {
    "Host": "https://tyk-gateway.tyk.svc.cluster.local",
    "Port": "443",
...
"http_server_options": {
    "use_ssl": true,
    "server_name": "api.example.com",
    "min_version": 771,
    "certificates": [
        {
        "domain_name": "*.example.com",
        "cert_file": "/etc/ssl/gateway-tls/tls.crt",
        "key_file": "/etc/ssl/gateway-tls/tls.key"
        }
    ]
},
...

我正在通过 K8s TLS 机密将证书安装在 tyk pod 中(对于仪表板也是如此):

kubectl create secret tls tyk-gateway --cert=example.com.crt --key=example.com.key

以及对应的K8s部署更新:

...
ports:
- containerPort: 443
- containerPort: 5000
volumeMounts:
...
    - name: tyk-gateway-tls
    readOnly: true
    mountPath: "/etc/ssl/gateway-tls"
volumes:
...
- name: tyk-gateway-tls
    secret:
    secretName: tyk-gateway

【问题讨论】:

    标签: ssl kubernetes tyk


    【解决方案1】:

    我正在考虑的一个可能的解决方案是使用certificates.k8s.io API 为服务的内部 DNS 名称 (tyk-gateway.tyk.svc.cluster.local) 生成一个有效证书,该证书由 K8s 集群的 CA 签名,如Kubernetes documentation here 中所述。

    然后可以将此证书添加到 http_server_options 配置并绑定到服务主机名。

    但是,该示例似乎表明我需要将服务和 pod IP 作为 SAN 包含在 CSR 中。我认为当使用不同的 IP 地址重新安排 pod 时,它不会是有效的。

    通过运行以下命令生成私钥和证书签名请求(或 CSR):

    cat <<EOF | cfssl genkey - | cfssljson -bare server
    {
    "hosts": [
        "my-svc.my-namespace.svc.cluster.local",
        "my-pod.my-namespace.pod.cluster.local",
        "172.168.0.24",
        "10.0.34.2"
    ],
    "CN": "my-pod.my-namespace.pod.cluster.local",
    "key": {
        "algo": "ecdsa",
        "size": 256
    }
    }
    EOF
    

    其中 172.168.0.24 是服务的集群 IP,my-svc.my-namespace.svc.cluster.local 是服务的 DNS 名称,10.0.34.2 是 pod 的 IP,my-pod.my-namespace.pod。 cluster.local 是 pod 的 DNS 名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      • 2022-10-12
      • 1970-01-01
      • 2019-10-29
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      相关资源
      最近更新 更多