我正在尝试通过Kubernetes、helm chart、,https://www.consul.io/docs/k8s/helm
基于我在Kubernetes之前的知识:服务,通过Consul Agent使用Consul访问,在每个主机上运行,并在主机上侦听IP
现在,我通过Helm图表部署到Kubernetes集群。首先误解了术语,在此设置中领事代理与客户?我想是同一个
现在,设置:
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)}]
Pods,客户端/代理是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节点(网络:
- 查找客户端/代理服务或创建自己的服务。因此,它将由领事的用户使用。例如,我将为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
- 可选:将在代理服务中添加topologyKeys,这样每个使用者就不会跨越主机边界
问题2这是正确的方法吗?或者Consul Kubernetes部署不同
您可以使用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-领事http api获取更多信息。