Как перенаправить трафик c с Nginx входа на сервер приложений Tomcat - PullRequest
0 голосов
/ 08 января 2020

У меня есть кластер Kubernetes с (kubernetes) Nginx Контроллер входа со следующими правилами входа:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-rules
#  namespace: default

### Virtual hosts ###
spec:

  rules:

  - host: dashboard.example.com
    http:
      paths:
        - path: /
          backend:
            serviceName: test
            servicePort: 443

Приложение test обслуживается сервером Tomcat.

server.xml для Tomcat:

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
        URIEncoding="UTF-8"
               redirectPort="443" />

    <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
        sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
        scheme="https" secure="true" URIEncoding="UTF-8"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/odvsdva.p12"
        certificateKeystorePassword="sdvsdvsdvsd"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

    <Connector port="8009" protocol="AJP/1.3" redirectPort="443" />

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

    </Engine>
  </Service>
</Server>

Когда я открываю в браузере dashboard.example.com, когда путь в Ingress равен /, я получаю стандартную страницу состояния Tomcat (если вы видите это, вы успешно установили Tomcat. Поздравляем!).

Теперь, если я go до dasboard.example.com/test, я могу открыть свое приложение.

Однако я бы Мне нравится открывать приложение, просто перейдя к dashboard.example.com/.

Итак, я пытаюсь изменить путь в Ingress с / в /test. Но затем я получаю This site can’t be reached в браузере.

Я не настроил Tomcat, и у меня очень мало ноу-хау по этому вопросу. Надеюсь, я предоставлю достаточно подробностей выше.

РЕДАКТИРОВАТЬ

Мой кластер k8s находится внутри виртуальной машины Ubuntu vagrant.

root@vagrant:/home/vagrant# kubectl version
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.4", GitCommit:"67d2fcf276fcd9cf743ad4be9a9ef5828adc082f", GitTreeState:"clean", BuildDate:"2019-09-18T14:51:13Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.7", GitCommit:"6c143d35bb11d74970e7bc0b6c45b6bfdffc0bd4", GitTreeState:"clean", BuildDate:"2019-12-11T12:34:17Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}

Ответы [ 2 ]

3 голосов
/ 08 января 2020

Сохраняйте путь в Ingress как /

Удалите готовый каталог ROOT/ из tomcat и переименуйте ваш военный файл в ROOT.war перед его развертыванием.

0 голосов
/ 08 января 2020

Я считаю, что вы ищете nginx.ingress.kubernetes.io/rewrite-target, но для вставьте компонент пути, а не удалите его, как в их примере:

kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /test$1
spec:
  rules:    
  - host: dashboard.example.com
    http:
      paths:
        - path: '(/.*)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...