Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes GKE上Neo4j因果簇的前导节点暴露_Kubernetes_Neo4j - Fatal编程技术网

Kubernetes GKE上Neo4j因果簇的前导节点暴露

Kubernetes GKE上Neo4j因果簇的前导节点暴露,kubernetes,neo4j,Kubernetes,Neo4j,根据中指出的限制,需要进行一些配置,以便在集群外部访问螺栓+布线。我创建了以下配置,以允许内部网络上的应用程序访问集群内的节点: apiVersion: v1 kind: Service metadata: name: mygraph-neo4j-access labels: statefulset.kubernetes.io/pod-name: mygraph-neo4j-core-0 annotations: cloud.google.com/load-balan

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

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.创建一个包含托管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上,我们将执行以下操作

$ 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"
在本例中,它是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

由于容器引擎在创建角色或ClusterRole时检查权限的方式,因此必须首先创建一个RoleBinding,该RoleBinding授予您要创建的角色中包含的所有权限

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

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

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

您可以验证它是否在以下情况下工作