Kubernetes上的模式注册表,可公开访问

时间:2018-11-27 09:09:18

标签: kubernetes apache-kafka confluent-schema-registry

我在Azure上有一个三个节点的kubernetes群集,其中包含三个Kafka代理和一个zookeeper实例。通过部署代理服务和负载均衡器,可以公开访问Kafka经纪人和Zookeeper。

现在,我正在部署架构注册表,我希望可以从kubernetes集群外部对其进行访问。 我正在按照与以前相同的步骤进行操作,但是无法从kubernetes集群外部访问架构注册表api。 如果我从docker容器中卷曲架构注册表,则一切工作正常,因此我认为架构注册表已正常运行。 这是我的架构注册表yamls描述符:

架构注册表部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: schema-registry
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: schema-registry
    spec:
      containers:
      - env:
        - name: SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL
          value: zookeeper-cluster-ip:2181
        - name: SCHEMA_REGISTRY_HOST_NAME
          value: registry-0.schema.default.svc.cluster.local
        - name: SCHEMA_REGISTRY_LISTENERS
          value: http://0.0.0.0:8081
        name: schema-registry
        image: confluentinc/cp-schema-registry:5.0.1
        ports:
        - containerPort: 8081
      restartPolicy: Always

模式注册表服务:

apiVersion: v1
kind: Service
metadata:
  name: schema-registry
  labels:
    name: schema-registry
spec:
  ports:
  - port: 8081
  selector:
    name: schema-registry
  type: LoadBalancer

部署服务后,将生成公共IP:

kubectl get services
NAME              TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)                      AGE
schema-registry   LoadBalancer   X.X.X.X.       X.X.X.X.       8081:30921/TCP               13m

,所以我运行

curl -X GET -i -H "Content-Type: application/vnd.schemaregistry.v1+json" http://X.X.X.X:8081/subjects

但是没有回应。 从容器内部,我从curl命令得到响应。

我希望从群集外部可以访问架构注册表的原因是我们希望从Nifi群集访问它。

有可能吗?

2 个答案:

答案 0 :(得分:0)

防火墙规则的一个简单问题就是问题的原因。 服务和部署配置还可以。 还是谢谢你!

答案 1 :(得分:0)

我之前也遇到过同样的问题,并使用选择器/应用程序解决了。

Deployment:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  namespace: ***
  name: schema-registry
  labels:
    app: schema-registry
spec:
  replicas: 1
  selector:
    matchLabels:
      app: schema-registry
  template:
    metadata:
      labels:
        app: schema-registry
    spec:
      containers:
      - name: schema-registry
        image: confluentinc/cp-schema-registry:5.3.0
        ports:
        - containerPort: 8081
        imagePullPolicy: Always
        env:
        - name: SCHEMA_REGISTRY_HOST_NAME
          value: schema-registry
        - name: SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL
          value: ***
        - name: SCHEMA_REGISTRY_LISTENERS
          value: http://0.0.0.0:8081
        command:
        - bash
        - -c
        - unset SCHEMA_REGISTRY_PORT; /etc/confluent/docker/run

Service:
apiVersion: v1
kind: Service
metadata:
  annotations: 
    service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
  name: schema-registry
  namespace: ***
  labels:
    app: schema-registry
spec:
  selector:
    app: schema-registry
  ports:
  - port: 8081
  type: LoadBalancer

希望这会有所帮助!