如何保护对外暴露的 Kubernetes 服务

  • 时间:
  • 浏览:0
  • 来源:uu快3计划_uu快3官方_单双

同样亲戚朋友这里还是使用一八个 Jenkins 服务,亲戚朋友也都需要使用任意的一八个 服务来验证,当然最好是没有身份验证功能的,比如没有安装 x-pack 的 Kibana。

当然除了使用 GitHub 之外,还都需要使用有些的 OAuth 认证服务,比如 Google,亲戚朋友都需要根据需要自行去添加即可。

对于 GitHub,亲戚朋友都需要通过github-orggithub-team来限制访问,一般设置email-doamin="*",亲戚朋友都需要通过OAuth2 Proxy的示例文档来查看更改 GitHub Provider 的配置。

最后,亲戚朋友需要在 Ingress 对象中添加auth-type:basicauth-jenkins-basic-auth一八个 annotations:(ingress.yaml)

首先亲戚朋友需要为亲戚朋友的应用添加自动的 HTTPS,都需要参考亲戚朋友前面的文章使用 Let's Encrypt 实现 Kubernetes Ingress 自动化 HTTPS。

只是按照上边的思路重新创建 Jenkins 的一八个 Ingress 对象:

只是更新上边的资源对象:

只是部署OAuth2 Proxy应用,这里亲戚朋友直接使用 Helm 来冗杂安装:

只是登录 Github,在https://github.com/settings/applications/new添加一八个 新的OAuth应用守护进程:

只是,创建一八个 基于上边 htpasswd 文件的 Secret 对象:

替添加你个人需要使用的域名,只是在回调 URL 上添加/oauth2/callback,点击注册后,记录下应用完整版页面Client IDClient Secret的值。只是还需要生成一八个 cookie 密钥,当然只是亲戚朋友系统中安装了 python 环境都需要直接生成,没有句子用 Docker 容器运行当然也行:

首先,亲戚朋友需要创建用于存储用户名和密码的htpasswd文件:

亲戚朋友在前面升级 Dashboard 的文章中就给亲戚朋友提到过这名法律办法来为亲戚朋友的服务添加 Basic Auth 认证:haproxy/nginx 和 traefik/nginx-ingress。

除了上边的 Basic Auth 认证法律办法以为,亲戚朋友还都需要通过 Github、Google 等提供的 OAuth 服务来进行身份验证。亲戚朋友都需要通过名为OAuth2 Proxy的工具来代理请求,它通过提供一八个 内部管理身份验证的反向代理来实现,使用起来也相对简单。

更新完成后,现在亲戚朋友去访问亲戚朋友的 Jenkins 服务都需要都看需要输入用户名和密码的提示信息了:

只是认证通后来就都需要跳转到亲戚朋友的 Jenkins 服务了:

有后来亲戚朋友需要在 Kubernetes 中暴露有些没有任何安全验证机制的服务,比如没有安装 xpack 的 Kibana,没有开启登录认证的 Jenkins 服务这类的,亲戚朋友也想通过域名来进行访问,比较域名比较方便,更主要的是对于 Kubernetes 上边的服务,通过 Ingress 暴露一八个 服务太方便了,只是还都需要通过 cert-manager 来自动的完成HTTPS化。什么都有就非常有必要对哪此服务进行有些安全验证了。

使用 haproxy/nginx 的法律办法非常简单,什么都有 直接添加 basic auth 认证,只是将请求转发到上边的服务;而 traefik/nginx-ingress 都直接提供了 basic auth 的支持,亲戚朋友这里使用 nginx-ingress 来为 Jenkins 服务添加一八个 basic auth 的认证服务。

亲戚朋友在 Jenkins 的核心 Ingress 对象中配置服务认证的 url:https://$host/oauth2/auth,只是通过创建一八个 同域的 Ingress 对象将oauth2路径代理到OAuth2 proxy应用去外理认证服务:

要实现内部管理服务来进行认证的关键点在于 nginx-ingress-controller 在 annotations 中为亲戚朋友提供了auth-urlauth-signin一八个 注解来允许配置内部管理身份验证的入口。

亲戚朋友这里通过cert-manager来自动为服务添加 HTTPS ,添加了kubernetes.io/tls-acme=true这名注解,只是亲戚朋友在浏览器中打开亲戚朋友的 Jenkins 服务,正常就会跳转到 GitHub 登录页面了:

上边这名八个 annotation 需要 nginx-ingress-controller 在 v0.9.0 版本或以上。