title: Expose Cassandra running on Kubernetes
body: <p>I am running Cassandra on Kubernetes (3 instances) and want to expose it to the outside, my application is not yet in Kubernetes. So i crated a load balanced service like so:</p>
  
  <pre><code>apiVersion: v1
  kind: Service
  metadata:
    namespace: getquanty
    labels:
      app: cassandra
    name: cassandra
    annotations:
      kubernetes.io/tls-acme: "true"
  spec:
    clusterIP:
    ports:
      - port: 9042
        name: cql
        nodePort: 30001
      - port: 7000
        name: intra-node
        nodePort: 30002
      - port: 7001
        name: tls-intra-node
        nodePort: 30003
      - port: 7199
        name: jmx
        nodePort: 30004
    selector:
      app: cassandra
    type: LoadBalancer
  </code></pre>
  
  <p>This is the result is:</p>
  
  <pre><code>NAME        CLUSTER-IP     EXTERNAL-IP     PORT(S)                                                       AGE
  cassandra   10.55.249.88   GIVEN_IP_GCE_LB   9042:30001/TCP,7000:30002/TCP,7001:30003/TCP,7199:30004/TCP   26m
  </code></pre>
  
  <p>I am able to connect using sh (cqlsh GIVEN_IP_GCE_LB ) but when i try to add data to Cassandra using the datastax driver for node, i got this:</p>
  
  <pre><code>message: 'Cannot achieve consistency level SERIAL',
         info: 'Represents an error message from the server',
         code: 4096,
         consistencies: 8,
         required: 1,
         alive: 0,
         coordinator: '35.187.166.68:9042' },
      '10.52.4.32:9042': 'Host considered as DOWN',
      '10.52.2.15:9042': 'Host considered as DOWN' },
   info: 'Represents an error when a query cannot be performed because no host is available or could be reached by the driver.',
   message: 'All host(s) tried for query failed. First host tried, 35.187.166.68:9042: ResponseError: Cannot achieve consistency level SERIAL. See innerErrors.' }
  </code></pre>
  
  <p>My first though was I need to expose the other ports too, so I did (intra-node, tls-intra-node, jmx), but it was the same error.</p>
  
  <p>Kubernetes gives you access to proxy, i tried to proxy from my machine using the constructed URL for the pod to test if i have access but i cannot connect using cqlsh:</p>
  
  <pre><code>http://127.0.0.1:8001/api/v1/namespaces/qq/pods/cassandra-0:cql/proxy
  </code></pre>
  
  <p>I am out of ideas, the one thing left to try is to expose every instance (make a service for every instance) which is very ugly, but it will let me connect to the nodes from the outside until i migrate the application to Kubernetes.</p>
  
  <p>Does any one have ideas how to expose Cassandra nodes to the internet and make the Datastax driver aware of all the nodes? Thank you for your time.</p>