# Connect Your Cluster

## Inside Cluster (Service-To-Service)

### Connect within the same namespace

Each cluster deployment exposes 3 services with the prefix of your cluster name.

For example, kubemq-cluster as cluster name:

| Service | Name                | Default Port |
| ------- | ------------------- | ------------ |
| gRPC    | kubemq-cluster-grpc | 50000        |
| Rest    | kubemq-cluster-rest | 9090         |
| API     | kubemq-cluster-api  | 8080         |

### Connect from external namespace

Each cluster deployment exposes 3 services with the prefix of your cluster name.

Use [Kubernetes DNS resolving ](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/)for accessing cluster services.

For example, namespace is kubemq and cluster name is kubemq-cluster with cluster.local domain name:

| Service | Name                                         | Default Port |
| ------- | -------------------------------------------- | ------------ |
| gRPC    | kubemq-cluster-grpc.kubemq.svc.cluster.local | 50000        |
| Rest    | kubemq-cluster-rest.kubemq.svc.cluster.local | 9090         |
| API     | kubemq-cluster-api.kubemq.svc.cluster.local  | 8080         |

## Outside Cluster

### Connect with Load Balancer

#### Expose gRPC Load Balancer

{% tabs %}
{% tab title="Kubemqctl" %}

```bash
kubemqctl create cluster --grpc-expose LoadBalancer
```

{% endtab %}

{% tab title="Helm" %}

```
helm install kubemq-cluster --set grpc.expose=LoadBalancer  -n kubemq kubemq-charts/kubemq
```

{% endtab %}

{% tab title="yaml" %}

```yaml
apiVersion: core.k8s.kubemq.io/v1alpha1
kind: KubemqCluster
metadata:
  name: kubemq-cluster
  namesapce: kubemq
  labels:
    app: kubemq-cluster
spec:
  replicas: 3
  grpc:
    expose: LoadBalancer
```

{% endtab %}
{% endtabs %}

#### Expose Rest Load Balancer

{% tabs %}
{% tab title="Kubemqctl" %}

```bash
kubemqctl create cluster --rest-expose LoadBalancer
```

{% endtab %}

{% tab title="Helm" %}

```bash
helm install kubemq-cluster --set rest.expose=LoadBalancer  -n kubemq kubemq-charts/kubemq
```

{% endtab %}

{% tab title="yaml" %}

```yaml
apiVersion: core.k8s.kubemq.io/v1alpha1
kind: KubemqCluster
metadata:
  name: kubemq-cluster
  namesapce: kubemq
  labels:
    app: kubemq-cluster
spec:
  replicas: 3
  rest:
    expose: LoadBalancer
```

{% endtab %}
{% endtabs %}

#### Expose Api Load Balancer

{% tabs %}
{% tab title="Kubemqctl" %}

```bash
kubemqctl create cluster --api-expose LoadBalancer
```

{% endtab %}

{% tab title="Helm" %}

```bash
helm install kubemq-cluster --set api.expose=LoadBalancer  -n kubemq kubemq-charts/kubemq
```

{% endtab %}

{% tab title="yaml" %}

```yaml
apiVersion: core.k8s.kubemq.io/v1alpha1
kind: KubemqCluster
metadata:
  name: kubemq-cluster
  namesapce: kubemq
  labels:
    app: kubemq-cluster
spec:
  replicas: 3
  api:
    expose: LoadBalancer
```

{% endtab %}
{% endtabs %}

### Connect with Node Port

Expose the required service via node port and access the service with host:port defined.

#### Configure gRPC Node Port

{% tabs %}
{% tab title="Kubemqctl" %}

```bash
kubemqctl create cluster --grpc-expose NodePort --grpc-node-port 30500
```

{% endtab %}

{% tab title="Helm" %}

```
helm install kubemq-cluster --set grpc.expose=NodePort,grpc-nodePort=30500  -n kubemq kubemq-charts/kubemq
```

{% endtab %}

{% tab title="yaml" %}

```yaml
apiVersion: core.k8s.kubemq.io/v1alpha1
kind: KubemqCluster
metadata:
  name: kubemq-cluster
  namesapce: kubemq
  labels:
    app: kubemq-cluster
spec:
  replicas: 3
  grpc:
    expose: NodePort
    nodePort: 30500
```

{% endtab %}
{% endtabs %}

#### Configure Rest Node Port

{% tabs %}
{% tab title="Kubemqctl" %}

```bash
kubemqctl create cluster --rest-expose NodePort --rest-node-port 30600
```

{% endtab %}

{% tab title="Helm" %}

```
helm install kubemq-cluster --set rest.expose=NodePort,rest-nodePort=30600  -n kubemq kubemq-charts/kubemq
```

{% endtab %}

{% tab title="yaml" %}

```yaml
apiVersion: core.k8s.kubemq.io/v1alpha1
kind: KubemqCluster
metadata:
  name: kubemq-cluster
  namesapce: kubemq
  labels:
    app: kubemq-cluster
spec:
  replicas: 3
  rest:
    expose: NodePort
    nodePort: 30500
```

{% endtab %}
{% endtabs %}

#### Configure Api Node Port

{% tabs %}
{% tab title="Kubemqctl" %}

```bash
kubemqctl create cluster --api-expose NodePort --api-node-port 30700
```

{% endtab %}

{% tab title="Helm" %}

```
helm install kubemq-cluster --set api.expose=NodePort,api-nodePort=30700  -n kubemq kubemq-charts/kubemq
```

{% endtab %}

{% tab title="yaml" %}

```yaml
apiVersion: core.k8s.kubemq.io/v1alpha1
kind: KubemqCluster
metadata:
  name: kubemq-cluster
  namesapce: kubemq
  labels:
    app: kubemq-cluster
spec:
  replicas: 3
  api:
    expose: NodePort
    nodePort: 30500
```

{% endtab %}
{% endtabs %}

### Connect with Kubemqctl as Proxy

Kubemqctl CLI tool provides a very useful command which port-forward all cluster services ports of selected cluster to localhost.

Run:

```bash
kubemqctl set cluster proxy
```

Will show :

```
Current Kubernetes cluster context connection: kubernetes-local
? Select Kubemq cluster to Proxy kubemq/kubemq-cluster
Current Kubernetes cluster context connection: kubernetes-local
Connecting to kuberenets cluster...Ok.
start proxy for kubemq/kubemq-cluster-1. press CTRL C to close.
kubemq/kubemq-cluster-1:8080 -> 127.0.0.1:8080
kubemq/kubemq-cluster-1:9090 -> 127.0.0.1:9090
kubemq/kubemq-cluster-1:50000 -> 127.0.0.1:50000
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.kubemq.io/how-to/connect-your-cluster.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
