簡體   English   中英

如何在Kubernetes部署文件中啟用Cassandra密碼身份驗證

[英]How to enable Cassandra Password Authentication in Kubernetes deployment file

我已經為此苦了很久了。 到目前為止,我的努力如下所示。 我認為env變量CASSANDRA_AUTHENTICATOR應該啟用密碼驗證。 但是,使用此配置重新部署后,我仍然可以在沒有密碼的情況下登錄。 關於如何在Kubernetes部署文件中啟用密碼身份驗證的任何想法?

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: cassandra
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: cassandra
    spec:
      containers:
          - name: cassandra
            image: cassandra
            env:
              - name: CASSANDRA_CLUSTER_NAME
                value: Cassandra
              - name: CASSANDRA_AUTHENTICATOR
                value: PasswordAuthenticator
            ports:
              - containerPort: 7000
                name: intra-node
              - containerPort: 7001
                name: tls-intra-node
              - containerPort: 7199
                name: jmx
              - containerPort: 9042
                name: cql

            volumeMounts:
              - mountPath: /var/lib/cassandra/data
                name: data
      volumes:
        - name: data
          emptyDir: {}

環境是Google Cloud Platform。

因此,我對您提到的工件做了一些更改:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: cassandra
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: cassandra
    spec:
      containers:
          - name: cassandra
            image: bitnami/cassandra:latest
            env:
              - name: CASSANDRA_CLUSTER_NAME
                value: Cassandra
              - name: CASSANDRA_PASSWORD
                value: pass123
            ports:
              - containerPort: 7000
                name: intra-node
              - containerPort: 7001
                name: tls-intra-node
              - containerPort: 7199
                name: jmx
              - containerPort: 9042
                name: cql

            volumeMounts:
              - mountPath: /var/lib/cassandra/data
                name: data
      volumes:
        - name: data
          emptyDir: {}

我所做的更改是:

image名稱已更改為bitnami/cassandra:latest再換成env CASSANDRA_AUTHENTICATORCASSANDRA_PASSWORD

部署上述工件后,我可以如下所示進行身份驗證

  • 試圖執行到Pod

     fedora@dhcp35-42:~/tmp/cassandra$ oc exec -it cassandra-2750650372-g8l9s bash root@cassandra-2750650372-g8l9s:/# 
  • 進入Pod后,嘗試通過服務器進行身份驗證

     root@cassandra-2750650372-g8l9s:/# cqlsh 127.0.0.1 9042 -p pass123 -u cassandra Connected to Cassandra at 127.0.0.1:9042. [cqlsh 5.0.1 | Cassandra 3.11.0 | CQL spec 3.4.4 | Native protocol v4] Use HELP for help. cassandra@cqlsh> 

可以在https://hub.docker.com/r/bitnami/cassandra/中找到該圖像文檔

如果您不習慣使用第三方映像,並且想使用上游社區管理的映像,則可以尋找以下解決方案,該解決方案更加DIY,但也更加靈活。


要設置密碼,您嘗試使用env CASSANDRA_AUTHENTICATOR但是尚未將其合並為圖像cassandra建議。 您可以在此處查看打開的PR。

現在,上游建議在/etc/cassandra/cassandra.yaml掛載cassandra.yaml文件,以便人們可以設置所需的任何設置。

因此,請按照以下步驟進行操作:

我對文件進行了以下更改:

$ diff cassandra.yaml mycassandra.yaml 
103c103
< authenticator: AllowAllAuthenticator
---
> authenticator: PasswordAuthenticator
  • 使用該文件創建configmap

我們必須創建Kubernetes Configmap ,然后將其安裝在容器內,我們無法像docker那樣進行主機安裝。

    $ cp mycassandra.yaml cassandra.yaml
    $ k create configmap cassandraconfig --from-file ./cassandra.yaml

configmap的名稱是cassandraconfig

  • 現在編輯deployment以使用此配置並將其安裝在正確的位置

     apiVersion: extensions/v1beta1 kind: Deployment metadata: name: cassandra spec: replicas: 1 template: metadata: labels: app: cassandra spec: containers: - name: cassandra image: cassandra env: - name: CASSANDRA_CLUSTER_NAME value: Cassandra ports: - containerPort: 7000 name: intra-node - containerPort: 7001 name: tls-intra-node - containerPort: 7199 name: jmx - containerPort: 9042 name: cql volumeMounts: - mountPath: /var/lib/cassandra/data name: data - mountPath: /etc/cassandra/ name: cassandraconfig volumes: - name: data emptyDir: {} - name: cassandraconfig configMap: name: cassandraconfig 

創建此部署后。

  • 現在在Pod中執行

     $ k exec -it cassandra-1663662957-6tcj6 bash root@cassandra-1663662957-6tcj6:/# 
  • 嘗試使用客戶端

     root@cassandra-1663662957-6tcj6:/# cqlsh 127.0.0.1 9042 Connection error: ('Unable to connect to any servers', {'127.0.0.1': AuthenticationFailed('Remote end requires authentication.',)}) 

有關創建configMap以及通過在容器內安裝來使用它的更多信息,您可以閱讀此文檔該文檔對我有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM