外部访问有状态无头Kubernetes?

yebdmbv4  于 2021-06-15  发布在  Cassandra
关注(0)|答案(2)|浏览(325)

我已经在aws上创建了cassandra有状态/无头集群,它在集群中运行良好。唯一的问题是我无法从集群外部访问它。我尝试了kubernetes文档或stackoverflow引用上的大部分内容,但仍然无法解决它。
我有一个aws的安全小组。这是我的服务和状态集yaml文件。

apiVersion: v1
kind: Service
metadata:
  name: cassandra
spec:
  externalTrafficPolicy: Local
  ports:
  - nodePort: 30000
    port: 30000
    protocol: TCP
    targetPort: 9042
  selector:
    app: cassandra
  type: NodePort
apiVersion: "apps/v1"
kind: StatefulSet
metadata:
  name: cassandra
spec:
  serviceName: cassandra
  replicas: 2
  selector:
    matchLabels:
      app: cassandra
  template:
    metadata:
      labels:
        role: cassandra
        app: cassandra
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - env:
            - name: MAX_HEAP_SIZE
              value: 1024M
            - name: HEAP_NEWSIZE
              value: 1024M
            - name: CASSANDRA_SEEDS
              value: "cassandra-0.cassandra.default.svc.cluster.local"
            - name: CASSANDRA_CLUSTER_NAME
              value: "SetuCassandra"
            - name: CASSANDRA_DC
              value: "DC1-SetuCassandra"
            - name: CASSANDRA_RACK
              value: "Rack1-SetuCassandra"
            - name: CASSANDRA_SEED_PROVIDER
              value: io.k8s.cassandra.KubernetesSeedProvider
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
          image: library/cassandra:3.11
          name: cassandra
          volumeMounts:
            - mountPath: /cassandra-storage
              name: cassandra-storage
          ports:
            - containerPort: 9042
              name: cql
  volumeClaimTemplates:
  - metadata:
      name: cassandra-storage
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 320Gi

我很感激你在这方面的帮助。

qfe3c7zg

qfe3c7zg1#

关于aws安全组的详细信息还不够。但我猜您群集中的安全组不允许来自安全组的流量或来自另一个群集中的ip地址。像这样:

icnyk63a

icnyk63a2#

为有状态集创建的无头服务并不意味着该服务的用户可以访问。据我所知,它的主要目的是在给定sts的pod之间进行sts内部通信(在它们之间形成集群)。例如,如果您有3节点mongodb集群(作为sts),mongodb-0将希望与mongodb-1和mongodb-2交换集群信息/数据。
如果您想以用户身份访问此服务,那么您对mongodb-0/1/2不感兴趣(或关心),而对服务更感兴趣。典型的方法是创建一个headful服务(如果需要,可以使用nodeport)并访问它。
基本上创建两个服务,一个是无头服务(和sts一起使用),另一个是常规服务。两个服务的pod选择器可以相同。

相关问题