У меня следующая установка:
Балансировщик нагрузки указывает на входящий контроллер как на демонсет, работающий в кластере gcp-kubernetes, как показано в примере ниже:
apiVersion: v1
kind: Service
metadata:
name: lb
namespace: ns
labels:
app: lb
spec:
type: LoadBalancer
loadBalancerIP: x.x.x.x
ports:
- name: test1
port: 445
targetPort: test
- name: test2
port: 444
targetPort: test
selector:
k8s-app: ingress-controller
Вот демон для входящего контроллера
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ingress-controller
namespace: ns
labels:
k8s-app: ingress-controller
spec:
selector:
matchLabels:
app: ingress-controller
template:
metadata:
labels:
app: ingress-controller
spec:
terminationGracePeriodSeconds: 60
containers:
- name: ingress-controller
image: gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.15
resources:
requests:
memory: "0.3Gi"
cpu: "0.3"
limits:
memory: "0.5Gi"
cpu: "0.5"
readinessProbe:
httpGet:
path: /healthz
port: 10254
scheme: HTTP
livenessProbe:
httpGet:
path: /healthz
port: 10254
scheme: HTTP
initialDelaySeconds: 10
timeoutSeconds: 1
ports:
- name: test
hostPort: 444
containerPort: 443
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
args:
- /nginx-ingress-controller
- --ingress-class=public
- --default-backend-service=ns/default-http-backend
- --v=2
Затем входной сигнал указывает на простой nginx для тестовых целей.
Теперь я столкнулся со следующей проблемой:
Когда я вызываю домен для балансировщика нагрузки с портом 444 (test.mydomain.com:444), я успешно получаю индексную страницу nginx-default.
Однако, когда я вызываю домен с портом 445 (test.mydomain.com:445), я ожидал бы получить тот же результат, поскольку целевой порт блока балансировки нагрузки такой же, но он не работает. .
Похоже, что port
и hostPort
должны соответствовать.
Похоже, что targetPort в балансировщике нагрузки не работает должным образом, он как-то только пересылает port
от фунта до hostPort
входного контроллера.
Я уже пробовал несколько вещей, например настройку ingress-контроллера без hostPort
, используйте совершенно другой порт для hostPort
и т.д., но я так и не получил ожидаемого результата. Я видел в Интернете рабочие примеры без использования hostPort
однако они никогда не использовали наборы демонов, а только развертывания.
Как мне настроить loadbalancer и ingress-controller-daemonset для получения разных маршрутов портов к одному и тому же результату?
Если потребуется дополнительная информация, дайте мне знать!