从外部访问有状态的无头kubernetes?

时间:2018-09-24 09:37:46

标签: cassandra kubernetes

我已经在AWS上创建了Cassandra有状态/无头集群,并且在集群内部运行良好。唯一的问题是我无法从外部群集访问它。我尝试了Kubernetes文档或StackOverflow参考上的大多数操作,但仍然无法解决。

我有一个来自AWS的安全小组。 这是我的服务和statefulset 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

我对此表示感谢。

2 个答案:

答案 0 :(得分:1)

AWS安全组上没有足够的详细信息。但是我的猜测是,您群集中的安全组不允许来自安全组的流量或其他群集的IP地址。像这样:

enter image description here

答案 1 :(得分:0)

为有状态集创建的无头服务并不意味着该服务的用户可以访问。根据我的理解,其主要目的是在给定STS的Pod之间进行内部sts通信(以在它们之间形成集群)。例如,如果您有3个节点mongodb群集(作为STS),则mongodb-0希望与mongodb-1和mongodb-2交换群集信息/数据。

如果要以用户身份访问此服务,则对mongodb-0 / 1/2感兴趣(或不在乎),而对服务更感兴趣。典型的方法是创建一个headful服务(如果需要,可以创建一个nodeport)并访问它。

基本上创建两个服务,一个将是无头服务(并与STS一起使用),而另一个将是常规服务。两个服务的吊舱选择器可以相同。