在GKE上暴露Neo4j因果群集上的领导者节点

时间:2019-11-23 20:25:44

标签: kubernetes neo4j

根据user guide中指出的限制,需要进行一些配置才能使螺栓+路由在群集外部可访问。我创建了以下配置,以允许内部网络上的应用程序访问群集内的节点:

apiVersion: v1
kind: Service
metadata:
  name: mygraph-neo4j-access
  labels:
    statefulset.kubernetes.io/pod-name: mygraph-neo4j-core-0
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  loadBalancerIP: 10.0.0.0
  ports:
    - name: http
      port: 7474
      targetPort: 7474
    - name: https
      port: 7473
      targetPort: 7473
    - name: bolt
      port: 7687
      targetPort: 7687
  selector:
    statefulset.kubernetes.io/pod-name: mygraph-neo4j-core-0

这似乎没有问题,除非该节点崩溃并且另一个节点被指定为引导节点。在这种情况下,写入操作现在指向跟随者节点,并且写入操作失败。

作为GKE的新手,我想知道是否可以使用其他标签/选择器来标识特定节点名称之外的领导节点,如果没有,则可以使用什么其他方法来标识领袖。

文档建议为每个节点分配一个外部有效的DNS名称,但我不清楚如何执行此操作和/或这样做是否能真正解决标识领导者节点的问题。

1 个答案:

答案 0 :(得分:0)

这是configure ExternalDNS

的分步指南

1。创建一个将包含托管DNS记录的DNS区域。

$ gcloud dns managed-zones create "external-dns-test-gcp-zalan-do" \
    --dns-name "external-dns-test.gcp.zalan.do." \
    --description "Automatically managed zone by kubernetes.io/external-dns"

2。记下分配给您的新区域的名称服务器

$ gcloud dns record-sets list \
    --zone "external-dns-test-gcp-zalan-do" \
    --name "external-dns-test.gcp.zalan.do." \
    --type NS
NAME                             TYPE  TTL    DATA
external-dns-test.gcp.zalan.do.  NS    21600  ns-cloud-e1.googledomains.com.,ns-cloud-e2.googledomains.com.,ns-cloud-e3.googledomains.com.,ns-cloud-e4.googledomains.com.

通过在父区域中添加相应的NS记录,在此区域中查找DNS记录的父级区域。假设父区域是“ gcp-zalan-do”,域是“ gcp.zalan.do”,并且它也托管在Google上,我们将执行以下操作。

在这种情况下,它是ns-cloud- {e1-e4} .googledomains.com。但是您的可能会略有不同,例如{a1-a4},{b1-b4}等

通过在父区域中添加相应的NS记录,在此区域中查找DNS记录的父级区域。假设父区域是“ gcp-zalan-do”,域是“ gcp.zalan.do”,并且它也托管在Google上,我们将执行以下操作。

$ gcloud dns record-sets transaction start --zone "gcp-zalan-do"
$ gcloud dns record-sets transaction add ns-cloud-e{1..4}.googledomains.com. \
    --name "external-dns-test.gcp.zalan.do." --ttl 300 --type NS --zone "gcp-zalan-do"
$ gcloud dns record-sets transaction execute --zone "gcp-zalan-do"

3。部署外部DNS

由于在创建Role或ClusterRole时Container Engine检查权限的方式,您必须首先创建RoleBinding来授予您要创建的角色中包含的所有权限。

kubectl创建clusterrolebinding您的用户群集admin绑定--clusterrole =群集admin --user=your.google.cloud.email@example.org

然后应用以下清单文件之一来部署ExternalDNS。

Manifest (for clusters without RBAC enabled)

Manifest (for clusters with RBAC enabled)

如果要在首次运行时格外小心,请使用--dry-run。请注意,在空运行模式下运行时,您将看不到任何创建的记录。但是,您可以检查日志并观察将要执行的操作。

您可以按照these instructions

验证其是否有效