У меня есть кластер GKE, статический IP-адрес c и контейнер / модуль, который предоставляет 2 порта: 8081 (UI https) и 8082 (WSS https). Я должен подключиться к "Utt Https" и "WSS Https" на одном IP. Служба "WSS Https" не имеет конечную точку проверки работоспособности.
Нужно ли мне использовать вход Isito, Consul, Nginx или какой-либо другой сервис sh для разрешить эти соединения на одном и том же IP с разными портами?
Возможно ли это вообще?
То, что я пробовал :
- GCP global lb с 2 независимыми входными службами. Yaml для второго сервиса никогда не работает правильно, но я могу добавить другой резервный сервис через пользовательский интерфейс. Вход всегда возвращается к проверке работоспособности по умолчанию для службы «WSS Https», и она всегда вредна для здоровья.
- Изменен тип службы с
NodePort
на LoadBalancer
со значением c ip. Это не позволит мне изменить проверку готовности и всегда возвращается обратно. - GCP GLIB с 1 входом и 2 бэкэндами дает мне тот же сбой проверки работоспособности, что и выше
- TCP Proxy - не позволяет мне установить одну и ту же группу экземпляров.
Ниже приведены мои входные данные, службы и развертывания.
Входные данные
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: app-ingress
namespace: myappnamespace
annotations:
kubernetes.io/ingress.global-static-ip-name: global-static-ip-name
labels:
app: appname
spec:
backend:
serviceName: ui-service
servicePort: 8081
tls:
- hosts:
- my-host-name.com
secretName: my-secret
rules:
- host: my-host-name.com
http:
paths:
- backend:
serviceName: ui-service
servicePort: 8081
- host: my-host-name.com
http:
paths:
- backend:
serviceName: app-service
servicePort: 8082
Службы
---
apiVersion: v1
kind: Service
metadata:
labels:
name: ui-service
name: ui-service
namespace: myappnamespace
annotations:
cloud.google.com/app-protocols: '{"ui-https":"HTTPS"}'
beta.cloud.google.com/backend-config: '{"ports":{"8081":"cloud-armor"}}'
spec:
selector:
app: appname
ports:
- name: ui-https
port: 8081
targetPort: "ui"
protocol: "TCP"
selector:
name: appname
type: NodePort
---
apiVersion: v1
kind: Service
metadata:
labels:
name: app-service
name: app-service
namespace: myappnamespace
annotations:
cloud.google.com/app-protocols: '{"serviceport-https":"HTTPS"}'
beta.cloud.google.com/backend-config: '{"ports":{"8082":"cloud-armor"}}'
spec:
selector:
app: appname
ports:
- name: serviceport-https
port: 8082
targetPort: "service-port"
protocol: "TCP"
selector:
name: appname
type: NodePort
---
Развертывание
apiVersion: apps/v1
kind: Deployment
metadata:
name: appname
namespace: myappnamespace
labels:
name: appname
spec:
replicas:1
selector:
matchLabels:
name: appname
strategy:
type: Recreate
template:
metadata:
name: appname
namespace: appnamespace
labels:
name: appname
spec:
restartPolicy: Always
serviceAccountName: myserviceaccount
containers:
- name: my-container
image: image
ports:
- name: service-port
containerPort: 8082
- name: ui
containerPort: 8081
readinessProbe:
failureThreshold: 3
httpGet:
path: /api/health
port: 8081
scheme: HTTPS
livenessProbe:
exec:
command:
- cat
- /version.txt
[......]