Сегодня решил реализовать в кубере прокси на сервис, который располагается на другом сервере (git, registry). Так как вопрос работы с Persistent Volume еще для меня полностью не решенный, то я отложил их переезд в кубер, но вот мне очень понравилось, что в кубере можно очень просто создавать сертификаты.
В итоге нашел такое решение:
- создаем сервис типа ExternalName и указанным IP адресом
- создаем Ingress с маппингом между доменом и конкретным сервисом.
services.yaml
```yaml
apiVersion: v1
kind: Service
metadata:
name: git-service
spec:
type: ExternalName
externalName: 10.134.67.7
selector:
app: git
ports:
- protocol: TCP
port: 3000
targetPort: 3000
name: git
---
apiVersion: v1
kind: Service
metadata:
name: registry-ui-service
spec:
type: ExternalName
externalName: 10.134.67.7
selector:
app: registry-ui
ports:
- protocol: TCP
port: 8180
targetPort: 8180
name: registry-ui
---
apiVersion: v1
kind: Service
metadata:
name: registry-service
spec:
type: ExternalName
externalName: 10.134.67.7
selector:
app: registry
ports:
- protocol: TCP
port: 8181
targetPort: 8181
name: registry
```
ingress.yaml
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: velizarov-ext-ingress
annotations:
cert-manager.io/issuer: letsencrypt-prod
spec:
tls:
- hosts:
- git.velizarov.ru
- registry-ui.velizarov.ru
- registry.velizarov.ru
secretName: velizarov-ext-tls-secret
rules:
- host: git.velizarov.ru
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: git-service
port:
name: git
- host: registry-ui.velizarov.ru
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: registry-ui-service
port:
name: registry-ui
- host: registry.velizarov.ru
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: registry-service
port:
name: registry
```
Применяем конфигурацию в Kubernetes
kubectl apply -f services.yaml -n <namespace>
kubectl apply -f ingress.yaml -n <namespace>