【问题标题】:Hashicorp Consul, Agent/Client accessHashicorp 领事,代理/客户访问
【发布时间】:2021-02-22 11:47:12
【问题描述】:

我正在尝试通过 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 模板 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 部署来说是不同的

【问题讨论】:

    标签: kubernetes client consul consul-template


    【解决方案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 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 2021-06-04
      • 1970-01-01
      相关资源
      最近更新 更多