0

我正在尝试通过 Kubernetes、helm chart、https: //www.consul.io/docs/k8s/helm 进行 Consul 设置

基于我的Kubernetes前知识:服务,通过Consul Agent使用Consul访问,在每台主机上运行并监听主机IP

现在,我通过 Helm chart 部署到 Kubernetes 集群。首先误解了这个设置中的术语,Consul Agent vs Client?我想是一样的

现在,设置:

Helm 图表配置(Terraform 片段),没有特定于客户端/代理及其服务:

global:
  name: "consul"
  datacenter: "${var.consul_config.datacenter}"
server:
  storage: "${var.consul_config.storage}"
  connect: false

syncCatalog:
  enabled: true
  default: true
  k8sAllowNamespaces: ['*']
  k8sDenyNamespaces: [${join(",", var.consul_config.k8sDenyNamespaces)}]

Pod、客户端/代理是 DaemonSet,不在主机网络模式下

kubectl get pods
NAME                                  READY   STATUS    RESTARTS   AGE
consul-8l587                          1/1     Running   0          11h
consul-cfd8z                          1/1     Running   0          11h
consul-server-0                       1/1     Running   0          11h
consul-server-1                       1/1     Running   0          11h
consul-server-2                       1/1     Running   0          11h
consul-sync-catalog-8b688ff9b-klqrv   1/1     Running   0          11h
consul-vrmtp                          1/1     Running   0          11h

服务

 kubectl get service
NAME            TYPE           CLUSTER-IP       EXTERNAL-IP             PORT(S)                                                                   AGE
consul          ExternalName   <none>           consul.service.consul   <none>                                                                    11h
consul-dns      ClusterIP      172.20.124.238   <none>                  53/TCP,53/UDP                                                             11h
consul-server   ClusterIP      None             <none>                  8500/TCP,8301/TCP,8301/UDP,8302/TCP,8302/UDP,8300/TCP,8600/TCP,8600/UDP   11h
consul-ui       ClusterIP      172.20.131.29    <none>                  80/TCP                                                                    11h

问题 1服务在哪里,针对客户端(代理)pod,而不是服务器的 pod?我在掌舵图中错过了吗?

我的计划是,虽然我不打算使用主机(Kubernetes 节点)网络:

  1. 查找客户/代理服务或自己制作。因此,它将被 Consul 的用户使用。例如,我将为 Consul 模板的 Consul 模板 init pod 指定这个服务地址。在配置消费应用程序中
kubectl get pods --selector app=consul,component=client,release=consul
consul-8l587   1/1     Running   0          11h
consul-cfd8z   1/1     Running   0          11h
consul-vrmtp   1/1     Running   0          11h

  1. 可选:将在代理服务中添加一个 topologyKeys,因此每个消费者不会跨越主机边界

问题2是正确的方法吗?或者对于 Consul Kubernetes 部署来说是不同的

4

1 回答 1

1

您可以使用 Kubernetes 向下 API 将主机的 IP 作为环境变量注入您的 pod。

apiVersion: v1
kind: Pod
metadata:
  name: consul-example
spec:
  containers:
    - name: example
      image: 'consul:latest'
      env:
        - name: HOST_IP
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
      command:
        - '/bin/sh'
        - '-ec'
        - |
          export CONSUL_HTTP_ADDR="${HOST_IP}:8500"
          consul kv put hello world
  restartPolicy: Never

有关更多信息,请参阅https://www.consul.io/docs/k8s/installation/install#accessing-the-consul-http-api

于 2020-11-11T03:26:40.883 回答