Использование ingress для доступа к внешней службе с помощью ContextPath

#kubernetes #ibm-cloud #kubernetes-helm #kubernetes-ingress

#kubernetes #ibm-cloud #kubernetes-рулевой #kubernetes-вход

Вопрос:

У меня есть Wildfly с набором приложений, не запущенных в кластере kubernetes. Допустим, один из них http://wildfly-external/FOO/

Изнутри кластера я хочу, чтобы мои кластерные приложения могли получать доступ к FOO, не зная ContextPath в wildfly.

Наш подход заключался в создании конечной точки, службы и входа для этой службы, содержащего путь

service.yaml

 apiVersion: v1
kind: Service
metadata:
    annotations:
        meta.helm.sh/release-name: dns
        meta.helm.sh/release-namespace: test
    creationTimestamp: "2020-08-31T17:32:08Z"
    labels:
        app.kubernetes.io/instance: dns
        app.kubernetes.io/managed-by: Helm
        app.kubernetes.io/name: foo
        helm.sh/chart: dns-1.0.0-snapshot
    name: foo
    namespace: test
    resourceVersion: "151848872"
    selfLink: /api/v1/namespaces/test/services/foo
    uid: e5607cd4-ebaf-11ea-9f17-005056a7cff9
spec:
    clusterIP: 10.200.149.146
    ports:
        - name: foo
          port: 80
          protocol: TCP
          targetPort: 13000
    sessionAffinity: None
    type: ClusterIP
status:
    loadBalancer: {}

  

ingress.yaml

 apiVersion: extensions/v1beta1
kind: Ingress
metadata:
    annotations:
        meta.helm.sh/release-name: dns
        meta.helm.sh/release-namespace: test
    creationTimestamp: "2020-08-31T17:32:08Z"
    generation: 1
    labels:
        app.kubernetes.io/instance: dns
        app.kubernetes.io/managed-by: Helm
        app.kubernetes.io/name: foo
        helm.sh/chart: dns-1.0.0-snapshot
    name: foo
    namespace: test
    resourceVersion: "151848901"
    selfLink: /apis/extensions/v1beta1/namespaces/test/ingresses/foo
    uid: e56cc8c9-ebaf-11ea-9f17-005056a7cff9
spec:
    rules:
        - http:
              paths:
                  - backend:
                        serviceName: foo
                        servicePort: http
                    path: /FOO
status:
    loadBalancer:
        ingress:
            - ip: 10.6.1.1
  

К сожалению, когда curl http //foo / внутри модуля, я попадаю на стартовую страницу wildfly в http://wildfly , а не приложение в http://wildfly/FOO .
Похоже, что я получаю доступ к службе через http://foo / и не проходит через вход.

Возможно ли сделать то, что я хочу сделать? Какие-либо подсказки?

Ответ №1:

С моей точки зрения, вход находится поверх службы. Последовательность такова: браузер-> вход (баланс нагрузки приложения)-> служба. Теперь URL http//foo/ предназначен для доступа к службе вместо ingress. Вы можете использовать ingress для сопоставления контекста с сервисом с помощью перезаписи ingress, но вам нужен URL-адрес посещения с полным именем хоста ingress. Спасибо,

Комментарии:

1. Правильно ли я вас понял, что foo всегда будет обращаться к службе. Чтобы получить доступ к Ingress, мне нужно получить доступ к полному URL, например foo.cluster.xy.com ?