首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >k3d多集群通信

k3d多集群通信
EN

Stack Overflow用户
提问于 2022-08-29 13:32:52
回答 1查看 173关注 0票数 0

假设有两个独立的k3d集群(即:vaultdev),是否有一种方法可以为每个集群(最好使用https)拥有一个不同的URL:vault.cluster.internaldev.cluster.internal,并允许部署在dev.cluster.internal中的应用程序查找某些内容或与vault.cluster.internal中的应用程序交互?

集群定义如下:dev.yaml

代码语言:javascript
复制
apiVersion: k3d.io/v1alpha4
kind: Simple
metadata:
  name: dev
servers: 1
agents: 3
network: k3d-cluster
kubeAPI:
  host: "dev.cluster.internal"
  hostIP: "127.0.0.1"
image: rancher/k3s:v1.24.3-k3s1
ports:
  - port: 3000:3000
    nodeFilters:
      - loadbalancer
options:
  k3d:
    wait: true
    timeout: "60s"
  k3s:
    extraArgs:
      - arg: --tls-san=dev.cluster.internal
        nodeFilters:
          - server:*
      - arg: --disable=metrics-server
        nodeFilters:
          - server:*
      - arg: --disable=traefik
        nodeFilters:
          - server:*
  kubeconfig:
    updateDefaultKubeconfig: true
    switchCurrentContext: false

vault.yaml

代码语言:javascript
复制
apiVersion: k3d.io/v1alpha4
kind: Simple
metadata:
  name: vault
servers: 1
agents: 3
network: k3d-cluster
kubeAPI:
  host: "vault.cluster.internal"
  hostIP: "127.0.0.1"
image: rancher/k3s:v1.24.3-k3s1
ports:
 - port: 8200:8200
    nodeFilters:
      - loadbalancer
options:
  k3d:
    wait: true
    timeout: "60s"
  k3s:
    extraArgs:
      - arg: --tls-san=vault.cluster.internal
        nodeFilters:
          - server:*
      - arg: --disable=metrics-server
        nodeFilters:
          - server:*
      - arg: --disable=traefik
        nodeFilters:
          - server:*
  kubeconfig:
    updateDefaultKubeconfig: true
    switchCurrentContext: false

  • 可以在不使用服务网格的情况下做到这一点吗?
  • 可以更新集群中的核以允许解析其他集群主机名吗?
  • 可以通过码头网络配置来完成,以及如何实现?

这基本上是为了模拟真实世界的集群(但对于本地开发而言)。

EN

回答 1

Stack Overflow用户

发布于 2022-09-06 12:20:20

我找到了3种解决问题的方法。

第一个解决方案是将HostAliases部分添加到dev集群定义中,并使其指向vault集群负载平衡器的外部IP:

例如:初始化vault集群后,可以在它上运行以下命令

代码语言:javascript
复制
$ kubectl --context k3d-vault --namespace vault get services
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP     ...
...
vault        LoadBalancer   10.43.34.131   172.24.0.3      ...
                                           ^^^^^^^^^^
...

dev.yaml会是

代码语言:javascript
复制
#...
ports:
  - port: 3000:3000
    nodeFilters:
      - loadbalancer
hostAliases:
  - ip: 172.24.0.3
    hostnames:
      - vault.cluster.internal
#...
代码语言:javascript
复制
# (alternatively, this can be automated using the following command without editing `dev.yaml` file)
$ KMS_IP=$(kubectl --context k3d-vault --namespace vault get services | grep LoadBalancer | awk -F " " '{ print $4 }')
$ k3d cluster create --config dev.yaml --host-alias $KMS_IP:vault.cluster.internal

此解决方案允许解析主机名(正如您在生产集群中所期望的).

第二种解决方案的工作方式类似,但使用docker network inspect k3d-cluster (其中k3d-cluster是集群定义中的停靠者网络名称)。

类似地,运行docker network inspect k3d-cluster并记录由docker定义的负载均衡器子网的IP:

代码语言:javascript
复制
...
"cad3f3XXXXXX": {
    "Name": "k3d-vault-serverlb",
    "EndpointID": "47d5XXXX"
    "MacAddress": "02:42:ac:18:00:04",
    "IPv4Address": "172.24.0.4/16",  #<<< This IP can be used in dev cluster HostAliases
    "IPv6Address": ""
}
...

最后一种解决方案比较简单,但不那么灵活。它使用host.k3d.internal作为另一个集群的名称(允许解析它),但是您必须处理端口映射,因为所有集群都将解析为服务使用相同的URL (这并不理想,但足够容易测试多集群通信/bug/等等)。换句话说,将dev集群VAULT_ADDR配置为host.k3d.internal:8200而不是vault.cluster.internal:8200 --这在TLS/HTTPS (AFAIK)中是不灵活的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73529645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档