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

  • 时间:
  • 浏览:2

大伙儿 在 Jenkins 的核心 Ingress 对象中配置服务认证的 url:https://$host/oauth2/auth,怎么让通过创建有一个多同域的 Ingress 对象将oauth2路径代理到OAuth2 proxy应用去处里认证服务:

使用 haproxy/nginx 的妙招非常简单,本来直接换成 basic auth 认证,怎么让将请求转发到顶端的服务;而 traefik/nginx-ingress 都直接提供了 basic auth 的支持,大伙儿 这里使用 nginx-ingress 来为 Jenkins 服务换成有一个多 basic auth 的认证服务。

怎么让,创建有一个多基于顶端 htpasswd 文件的 Secret 对象:

顶端你你这有一个 annotation 需用 nginx-ingress-controller 在 v0.9.0 版本或以上。

有本来大伙儿 需用在 Kubernetes 中暴露什么都越来越 任何安全验证机制的服务,比如越来越 安装 xpack 的 Kibana,越来越 开启登录认证的 Jenkins 服务类似的,大伙儿 也想通过域名来进行访问,比较域名比较方便,更主要的是对于 Kubernetes 顶端的服务,通过 Ingress 暴露有一个多服务太方便了,怎么让还都不能通过 cert-manager 来自动的完成HTTPS化。什么都什么都就非常有必要对哪些服务进行什么都安全验证了。

怎么让登录 Github,在https://github.com/settings/applications/new换成有一个多新的OAuth应用系统线程池池:

大伙儿 这里通过cert-manager来自动为服务换成 HTTPS ,换成了kubernetes.io/tls-acme=true你你这俩注解,怎么让大伙儿 在浏览器中打开大伙儿 的 Jenkins 服务,正常就会跳转到 GitHub 登录页面了:

怎么让部署OAuth2 Proxy应用,这里大伙儿 直接使用 Helm 来繁复安装:

首先,大伙儿 需用创建用于存储用户名和密码的htpasswd文件:

要实现外部服务来进行认证的关键点在于 nginx-ingress-controller 在 annotations 中为大伙儿 提供了auth-urlauth-signin有一个多注解来允许配置外部身份验证的入口。

对于 GitHub,大伙儿 都不能通过github-orggithub-team来限制访问,一般设置email-doamin="*",大伙儿 都不能通过OAuth2 Proxy的示例文档来查看更改 GitHub Provider 的配置。

大伙儿 在前面升级 Dashboard 的文章中就给大伙儿 提到过一种生活妙招来为大伙儿 的服务换成 Basic Auth 认证:haproxy/nginx 和 traefik/nginx-ingress。

同样大伙儿 这里还是使用有一个多 Jenkins 服务,大伙儿 也都不能使用任意的有一个多服务来验证,当然最好是越来越 身份验证功能的,比如越来越 安装 x-pack 的 Kibana。

首先大伙儿 需用为大伙儿 的应用换成自动的 HTTPS,都不能参考大伙儿 前面的文章使用 Let's Encrypt 实现 Kubernetes Ingress 自动化 HTTPS。

怎么让更新顶端的资源对象:

怎么让按照顶端的思路重新创建 Jenkins 的有一个多 Ingress 对象:

除了顶端的 Basic Auth 认证妙招以为,大伙儿 还都不能通过 Github、Google 等提供的 OAuth 服务来进行身份验证。大伙儿 都不能通过名为OAuth2 Proxy的工具来代理请求,它通过提供有一个多外部身份验证的反向代理来实现,使用起来也相对简单。

更新完成后,现在大伙儿 去访问大伙儿 的 Jenkins 服务都不能看到需用输入用户名和密码的提示信息了:

当然除了使用 GitHub 之外,还都不能使用什么都的 OAuth 认证服务,比如 Google,大伙儿 都不能根据需用自行去换成即可。

最后,大伙儿 需用在 Ingress 对象中换成auth-type:basicauth-jenkins-basic-auth有一个多 annotations:(ingress.yaml)

替换成你此人 需用使用的域名,怎么让在回调 URL 上换成/oauth2/callback,点击注册后,记录下应用完整篇 页面Client IDClient Secret的值。怎么让还需用生成有一个多 cookie 密钥,当然怎么让大伙儿 系统中安装了 python 环境都不能直接生成,越来越 一句话用 Docker 容器运行当然也行:

怎么让认证通本来就都不能跳转到大伙儿 的 Jenkins 服务了: