假设有两个独立的k3d集群(即:vault、dev),是否有一种方法可以为每个集群(最好使用https)拥有一个不同的URL:vault.cluster.internal和dev.cluster.internal,并允许部署在dev.cluster.internal中的应用程序查找某些内容或与vault.cluster.internal中的应用程序交互?
集群定义如下:dev.yaml
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
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。
这基本上是为了模拟真实世界的集群(但对于本地开发而言)。
发布于 2022-09-06 12:20:20
我找到了3种解决问题的方法。
第一个解决方案是将HostAliases部分添加到dev集群定义中,并使其指向vault集群负载平衡器的外部IP:
例如:初始化vault集群后,可以在它上运行以下命令
$ 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会是
#...
ports:
- port: 3000:3000
nodeFilters:
- loadbalancer
hostAliases:
- ip: 172.24.0.3
hostnames:
- vault.cluster.internal
#...# (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:
...
"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)中是不灵活的。
https://stackoverflow.com/questions/73529645
复制相似问题