我已经在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
我对此表示感谢。
答案 0 :(得分:1)
答案 1 :(得分:0)
为有状态集创建的无头服务并不意味着该服务的用户可以访问。根据我的理解,其主要目的是在给定STS的Pod之间进行内部sts通信(以在它们之间形成集群)。例如,如果您有3个节点mongodb群集(作为STS),则mongodb-0希望与mongodb-1和mongodb-2交换群集信息/数据。
如果要以用户身份访问此服务,则对mongodb-0 / 1/2感兴趣(或不在乎),而对服务更感兴趣。典型的方法是创建一个headful服务(如果需要,可以创建一个nodeport)并访问它。
基本上创建两个服务,一个将是无头服务(并与STS一起使用),而另一个将是常规服务。两个服务的吊舱选择器可以相同。