我的Jenkins运行在Kubernetes中,服务类型为: LoadBalancer,并在下面添加了azure注释,以获取内部子网私有ip地址,以在内部公开服务。

  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    service.beta.kubernetes.io/azure-load-balancer-internal-subnet: subnetName

我有一个安装了Apache的ubuntu虚拟机。在apache配置中创建自签名证书并终止,我可以使用HTTPS访问apache主页。

然后,我已经为Jenkins服务IP地址创建了代理规则。基本上,我希望从Apache HTTPS -->访问Jenkins,以便在内部向kubernetes服务发送HTTP流量。

以下是Apache配置:

xxxx@xxxx:/etc/apache2/sites-available$ ls -ltrh
total 28K
-rw-r--r-- 1 root root 1332 Jul 16 18:14 000-default.conf
-rw-r--r-- 1 root root 6338 Jul 16 18:14 default-ssl.conf
drwxr-xr-x 2 root root 4096 Dec 12 17:24 abc
-rw-r--r-- 1 root root  680 Dec 12 13:04 abc.conf
drwxr-xr-x 2 root root 4096 Dec 12 14:29 xyz
-rw-r--r-- 1 root root 1151 Dec 12 13:08 xyz.conf

cat abc/00-redirect-to-https.conf
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^jenkins$ login [L,R=302]


cat abc.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/abc_error.log
    CustomLog ${APACHE_LOG_DIR}/abc_access.log combined

    <IfModule mod_headers.c>
      RequestHeader unset X-Forwarded-For
      RequestHeader unset X-Forwarded-Host
      RequestHeader unset X-Forwarded-Server
      RequestHeader set X-Forwarded-Proto "http"
      RequestHeader set X-Forwarded-Port "80"
    </IfModule>

    # Apache will try to set application/json based on mime type
    # This behaviour casing problems with empty json responses from spring
    RemoveType json

    Include sites-available/abc/*.conf
</VirtualHost>


cat xyz/00-jenkins.conf
ProxyPass /jenkins balancer://jenkins/jenkins
ProxyPassReverse  /jenkins balancer://jenkins/jenkins
<Proxy balancer://jenkins>
    BalancerMember http://x.x.x.x:8080 loadfactor=1 keepalive=On retry=0
    ProxySet lbmethod=bytraffic
</Proxy>


cat xyz.conf
<VirtualHost *:443>
    ServerAdmin webmaster@localhost

    ServerName FQDN

    LogLevel warn
    ErrorLog ${APACHE_LOG_DIR}/xyz_error.log
    CustomLog ${APACHE_LOG_DIR}/xyz_access.log combined

    <IfModule mod_headers.c>
      RequestHeader unset X-Forwarded-For
      RequestHeader unset X-Forwarded-Host
      RequestHeader unset X-Forwarded-Server
      RequestHeader set X-Forwarded-Proto "https"
      RequestHeader set X-Forwarded-Port "443"
    </IfModule>

    SSLEngine on
    SSLProtocol -ALL +TLSv1 +TLSv1.1 +TLSv1.2
    SSLHonorCipherOrder On
    SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

    SSLCertificateFile    /etc/apache2/certs/ca.cert
    SSLCertificateKeyFile /etc/apache2/certs/ca.key


    # Apache will try to set application/json based on mime type
    # This behaviour casing problems with empty json responses from spring
    RemoveType json

    Include sites-available/xyz/*.conf

</VirtualHost>

如果我从本地ubuntu VM执行curl -k https://localhost/jenkins,那么响应显示需要身份验证,这很好,如下所示,但是重定向url变为window.location.replace('/login?from=%2F')

<html><head><meta http-equiv='refresh' content='1;url=/login?from=%2Fjenkins'/><script>window.location.replace('/login?from=%2Fjenkins');</script></head><body style='background-color:white; color:white;'>


Authentication required
<!--
You are authenticated as: anonymous
Groups that you are in:

Permission you need to have (but didn't): hudson.model.Hudson.Read
 ... which is implied by: hudson.security.Permission.GenericRead
 ... which is implied by: hudson.model.Hudson.Administer
-->

</body></html>       

但是在相同的情况下,当我再次从浏览器https://FQDN/jenkins请求时,URL变成了https://FQDN/login?from=%2F,但是浏览器抛出了URL Not found错误

Not Found
The requested URL was not found on this server.

请在此处协助更正配置。

谢谢..

来自日志的更多观察:

当我执行curl -k https://localhost/jenkins操作时,apache access logs显示403,这是可以的,因为我没有传递凭据。

127.0.0.1 - - [13/Dec/2019:13:37:40 +0000] "GET /jenkins HTTP/1.1" 403 3297 "-" "curl/7.58.0"

当同样尝试从互联网浏览器https://FQDN/jenkins apache日志第一次显示403,这是想要的,但不久后apache试图找到更改的网址在同一虚拟机而不是重定向,由于这是我没有得到jenkins页面。

165.225.106.137 - - [13/Dec/2019:13:38:19 +0000] "GET /jenkins HTTP/1.1" 403 3446 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

165.225.106.137 - - [13/Dec/2019:13:38:19 +0000] "GET /jenkins HTTP/1.1" 403 1564 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

165.225.106.137 - - [13/Dec/2019:13:38:20 +0000] "GET /login?from=%2F HTTP/1.1" 404 541 "https://DNSname/jenkins" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

转载请注明出处:http://www.jlunlp.com/article/20230401/1409883.html

随机推荐

  1. 获取基于vue和apache反向代理的相同基本url

    我有一个vue应用程序,我正在使用pm2和apache进行测试。一旦pm2启动了应用程序,并且应用程序在端口3000上运行,我就会使用apache反向代理来使用域和https。但是,当我需要使用基本base_url时,我希望获得相同的url...

  2. 用Apache反向代理设置对外的WWW和文件服务器

    简介:一台机器用专线接入Internet作为防火墙,在内部网段上有一台WWW服务器(Redhat6.1,Apache1.3.9)希望这台机器能对外提供WWW服务器和基于apache的文件服...

  3. Apache设置反向代理的方法

    反向代理有很多实现方式,本文主要讲述Apache的反向代理。 1、简述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给int...

  4. Apache代理传递所有url并仅重写一个特定的url

    我有一个网站运行在后端的幽灵博客引擎。我将子域blog.domain.com配置为代理到ghost引擎(本地主机:2368),但是我需要在谷歌搜索控制台中验证这个子域,所以我需要blog.domain.com/googlefile.html...

  5. 通过API进行Apache Cloudstack控制台代理访问

    我利用cloudstack API集成到3de参与方门户中。我想通过API访问控制台代理,找不到这样做的API方法。即获取特定虚拟机的会话令牌,并从我们的3de参与方门户打开ajax窗口。管理服务器应该通过API公开控制台代理,然后我假设您...

  6. apache 代理配置

    apache 2.4.6版本 VirtualHost *:8080 ServerName 21.12.13.146 DocumentRoot /root/gbhu ErrorLog /root/gbhu/log/apach...

  7. 通过代理的Apache CXF SSL

    我正在使用Apache CXF连接到外部soap端点。在访问https/SSL外部终结点之前,我正在通过代理服务器(使用凭据)。支持外部web服务的团队说他们看不到我的基本身份验证头。在离开工作站之前,我记录了来自工作站的头部和有效负载。我...

  8. 使用Apache代理将shibboleth sp属性传递给Jetty上的应用程序

    我在Jetty embedded上运行了一些spring boot应用程序。我让Shibboleth SP在Apache服务器上运行。我可以通过AJP将断言属性传递给Tomcat,但是,由于Jetty9不再支持AJP,所以我不能这样做。我想...

  9. apache反向代理和监听多个端口设置

    修改apache配置文件httpd.conf 一、监听多个端口 在Listen 80后添加监听端口,如 Listen 80 Listen 8080 Listen 8008 二、反向代理设置 1、取消一下模块注释(即去掉前面的#) Loa...

  10. 如何使用Apache代理Weblogic集群上的单页应用

    作为升级传统Java应用程序(托管在Weblogic群集上)的一部分,此应用程序的一部分将被单页面应用程序(REACT)取代,通过API调用包含迁移后端功能的各种服务。现在,在将所有UI依赖项从遗留应用程序中移植出来之前,REACT SPA...