Ik heb in de Google Cloud omgeving een Kubernetes cluster opgezet. Op dit cluster ben ik bezig op monitoring op te zetten via Prometheus. Prometheus heeft de optie om informatie van verschillende servers op te halen via webinterface. Omdat ik deze informatie op de verschillende servers niet openbaar wil hebben, wil ik de benodigde poort voor één IP-adres openzetten.
Het probleem waar je dan tegenaan loopt, is dat de IP-adressen die de pods naar buiten gebruiken afhangen van de node waar die pod toevallig op staat. Binnen de Google Cloud is het ook nog eens zo dat de IP-adressen van de nodes kunnen veranderen, dus ik kan echt niet uitgaan van die IP-adressen.
Om dit probleem op te lossen, heb ik in dezelfde Google Cloud omgeving en in hetzelfde netwerk een VM opgezet en daar Squid op geïnstalleerd. Deze VM heeft voor zowel intern als extern een static IP gekregen.
Als ik poort 3128 openzet in de Google Firewall, dan kan ik vanaf mijn thuis PC gewoon werken via de proxy. Als ik een tweede VM opzet, kan ik via het interne netwerk ook werken met de proxy:
De volgende stap is het maken van de verbinding vanaf de Prometheus naar de proxy en daar loop ik tegen het probleem aan. Het lukt mij niet om verbinding te maken.
Op internet ben ik tegen gekomen dat dit opgelost kan worden, door een service en een endpoint aan te maken. Dit heb ik gedaan:
Helaas lijkt de verbinding dan nog steeds niet te werken:
Voor zover ik kan zien zijn de service en de endpoint wel gewoon aangemaakt:
Dit geheel is opgezet in de Google Cloud. Kubernetes draait op versie 1.9.7-gke.3. 10.164.0.4 is het Interne IP van de VM en de Prometheus zit in de monitoring namespace.
Iemand enig idee wat ik over het hoofd zie?
Het probleem waar je dan tegenaan loopt, is dat de IP-adressen die de pods naar buiten gebruiken afhangen van de node waar die pod toevallig op staat. Binnen de Google Cloud is het ook nog eens zo dat de IP-adressen van de nodes kunnen veranderen, dus ik kan echt niet uitgaan van die IP-adressen.
Om dit probleem op te lossen, heb ik in dezelfde Google Cloud omgeving en in hetzelfde netwerk een VM opgezet en daar Squid op geïnstalleerd. Deze VM heeft voor zowel intern als extern een static IP gekregen.
Als ik poort 3128 openzet in de Google Firewall, dan kan ik vanaf mijn thuis PC gewoon werken via de proxy. Als ik een tweede VM opzet, kan ik via het interne netwerk ook werken met de proxy:
code:
1
2
3
4
| root@test-vm:~# telnet 10.164.0.4 3128 Trying 10.164.0.4... Connected to 10.164.0.4. Escape character is '^]'. |
De volgende stap is het maken van de verbinding vanaf de Prometheus naar de proxy en daar loop ik tegen het probleem aan. Het lukt mij niet om verbinding te maken.
Op internet ben ik tegen gekomen dat dit opgelost kan worden, door een service en een endpoint aan te maken. Dit heb ik gedaan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| kind: "Service"
apiVersion: "v1"
metadata:
name: "http-proxy"
namespace: monitoring
spec:
ports:
-
name: "squid"
protocol: "TCP"
port: 3128
targetPort: 3128
nodePort: 0
---
kind: "Endpoints"
apiVersion: "v1"
metadata:
name: "http-proxy"
namespace: monitoring
subsets:
-
addresses:
-
ip: "10.164.0.4"
ports:
-
port: 3128
name: "squid" |
Helaas lijkt de verbinding dan nog steeds niet te werken:
code:
1
2
3
4
| /prometheus # telnet 10.164.0.4 3128 telnet: can't connect to remote host (10.164.0.4): Connection timed out /prometheus # telnet http-proxy 3128 telnet: can't connect to remote host (10.19.242.229): Connection timed out |
Voor zover ik kan zien zijn de service en de endpoint wel gewoon aangemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| hielkej@ontwikkel:/var/kubernetes$ kubectl describe endpoints http-proxy --namespace monitoring
Name: http-proxy
Namespace: monitoring
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Endpoints","metadata":{"annotations":{},"name":"http-proxy","namespace":"monitoring"},"subsets":[{"addresses":[{"ip":"10.164...
Subsets:
Addresses: 10.164.0.4
NotReadyAddresses: <none>
Ports:
Name Port Protocol
---- ---- --------
squid 3128 TCP
Events: <none>
hielkej@ontwikkel:/var/kubernetes$ kubectl describe service http-proxy --namespace monitoring
Name: http-proxy
Namespace: monitoring
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"http-proxy","namespace":"monitoring"},"spec":{"ports":[{"name":"squid","nodePo...
Selector: <none>
Type: ClusterIP
IP: 10.19.242.229
Port: squid 3128/TCP
TargetPort: 3128/TCP
Endpoints: 10.164.0.4:3128
Session Affinity: None
Events: <none> |
Dit geheel is opgezet in de Google Cloud. Kubernetes draait op versie 1.9.7-gke.3. 10.164.0.4 is het Interne IP van de VM en de Prometheus zit in de monitoring namespace.
Iemand enig idee wat ik over het hoofd zie?