我已经在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
我很感激你在这方面的帮助。
2条答案
按热度按时间qfe3c7zg1#
关于aws安全组的详细信息还不够。但我猜您群集中的安全组不允许来自安全组的流量或来自另一个群集中的ip地址。像这样:
icnyk63a2#
为有状态集创建的无头服务并不意味着该服务的用户可以访问。据我所知,它的主要目的是在给定sts的pod之间进行sts内部通信(在它们之间形成集群)。例如,如果您有3节点mongodb集群(作为sts),mongodb-0将希望与mongodb-1和mongodb-2交换集群信息/数据。
如果您想以用户身份访问此服务,那么您对mongodb-0/1/2不感兴趣(或关心),而对服务更感兴趣。典型的方法是创建一个headful服务(如果需要,可以使用nodeport)并访问它。
基本上创建两个服务,一个是无头服务(和sts一起使用),另一个是常规服务。两个服务的pod选择器可以相同。