在Kubernetes集群中运行的Elasticsearch Pod的基本身份验证

时间:2019-03-10 18:12:06

标签: docker elasticsearch nginx kubernetes kibana

我们需要为运行在我们的kubernetes集群中的elasticsearch和kibana oss(Apache许可证)创建基本(用户名/密码)身份验证。 我们在AWS(EKS),Google Cloud(GKE),本地安装中都有多云安装,并且我们计划使用Azure。

我想到了具有基本身份验证的nginx反向代理,它在每个elasticsearch / kibana pod中作为sidecar容器运行。这将是一个简单且已知的解决方案。

问题是:k8s集群中正确的解决方案是什么?我们可以从无数种易于维护的解决方案中得到什么?

1 个答案:

答案 0 :(得分:2)

好吧,如果您使用的是nginx ingress controller,则可以这样添加基本身份验证:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: kibana
  namespace: kibana
  annotations:
    kubernetes.io/ingress.class: "nginx"
    # type of authentication
    nginx.ingress.kubernetes.io/auth-type: basic
    # name of the secret that contains the user/password definitions
    nginx.ingress.kubernetes.io/auth-secret: my-secret-basic-auth
    # message to display with an appropriate context why the authentication is required
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - kibana-admin'
  ...
  ...

my-secret-basic-auth必须使用htpasswd创建:

$ htpasswd -c auth foo
New password: <bar>
New password:
Re-type new password:
Adding password for user foo

然后您需要创建机密:

$ kubectl create secret generic my-secret-basic-auth --from-file=auth
secret "my-secret-basic-auth" created

这很容易维护,但是您将永远与nginx ingress controller保持联系。