当前位置: 首页 > 知识库问答 >
问题:

暴露GKE mongo权限改造到互联网

楚威
2023-03-14

我现在正在尝试实施新系统。我的系统将分为2个集群。首先是用于计算工作。它会被CI/CD频繁更改。然后为了防止我的低年级学生发生意外,也节省成本。因为在计算机节点上不需要使用100GB之类的数据库

现在我正在使用helm设置我的mongo replicaset。我的配置工作正常。这是我在安装过程中的终端日志。

每个节点安装100GB。它们是3个节点。

$ gcloud container clusters create elmo --disk-size=100GB --enable-cloud-logging --enable-cloud-monitoring

我在values.yaml中更改了用户名和密码

mongodbUsername: myuser
mongodbPassword: mypassword

但是,当我跳转到pod时。它不需要我做任何身份验证。我可以执行show dbs

$ kubectl exec -it ipman-mongodb-replicaset-0 mongo

MongoDB shell version v4.0.6
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("966e85fd-8857-46ac-a2a4-a8b560e37104") }
MongoDB server version: 4.0.6
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
2019-03-20T12:15:51.266+0000 I STORAGE  [main] In File::open(), ::open for '//.mongorc.js' failed with Unknown error
Server has startup warnings:
2019-03-20T11:36:03.768+0000 I STORAGE  [initandlisten]
2019-03-20T11:36:03.768+0000 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2019-03-20T11:36:03.768+0000 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2019-03-20T11:36:05.082+0000 I CONTROL  [initandlisten]
2019-03-20T11:36:05.082+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-03-20T11:36:05.082+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2019-03-20T11:36:05.083+0000 I CONTROL  [initandlisten]
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).

The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.

To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---

rs0:PRIMARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

我可以看到2个服务正在运行mongoDB-副本集

$ kubectl describe svc ipman-mongodb-replicaset

Name:              ipman-mongodb-replicaset
Namespace:         default
Labels:            app=mongodb-replicaset
                   chart=mongodb-replicaset-3.9.2
                   heritage=Tiller
                   release=ipman
Annotations:       service.alpha.kubernetes.io/tolerate-unready-endpoints: true
Selector:          app=mongodb-replicaset,release=ipman
Type:              ClusterIP
IP:                None
Port:              mongodb  27017/TCP
TargetPort:        27017/TCP
Endpoints:         10.60.1.5:27017,10.60.2.7:27017,10.60.2.8:27017
Session Affinity:  None
Events:            <none>

$ kubectl describe svc ipman-mongodb-replicaset-client

Name:              ipman-mongodb-replicaset-client
Namespace:         default
Labels:            app=mongodb-replicaset
                   chart=mongodb-replicaset-3.9.2
                   heritage=Tiller
                   release=ipman
Annotations:       <none>
Selector:          app=mongodb-replicaset,release=ipman
Type:              ClusterIP
IP:                None
Port:              mongodb  27017/TCP
TargetPort:        27017/TCP
Endpoints:         10.60.1.5:27017,10.60.2.7:27017,10.60.2.8:27017
Session Affinity:  None
Events:            <none>

我看到这里和这里。我有3个IP地址。我应该用哪一个?

我认为负载平衡器可能不适合我的需要,因为它通常与后端服务一起使用,以平衡节点之间的负载。对于我的情况。写的是母版,读的是副本。

$ gcloud compute instances list
NAME                                 ZONE               MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
gke-elmo-default-pool-c5dc6e86-1j8v  asia-southeast1-a  n1-standard-1               10.148.0.59  35.197.148.201  RUNNING
gke-elmo-default-pool-c5dc6e86-5hs4  asia-southeast1-a  n1-standard-1               10.148.0.57  35.198.217.71   RUNNING
gke-elmo-default-pool-c5dc6e86-wh0l  asia-southeast1-a  n1-standard-1               10.148.0.58  35.197.128.107  RUNNING

问题:

>

  • 为什么我的用户名:密码在进行身份验证时不计入帐户?

    如何公开我的mongo shell并让来自internet的客户端使用我的数据库服务器

    mongo -u <user> -p <pass> --host kluster.me.com --port 27017
    

    我已经查看了驾驶图文档。我担心我用错了k8s。所以我决定在这里问一下。

  • 共有1个答案

    何雅惠
    2023-03-14

    我无法回答密码问题,但为DB使用单独的集群可能不是最佳选择。通过创建一个单独的集群,您将被迫向世界公开您的敏感数据库。这并不理想。

    我建议您在现有集群上部署mongo。通过这种方式,只需使用服务名称作为主机名,就可以将计算工作负载连接到mongo。

    如果您的mongo需要更大的驱动器,只需使用持久性磁盘并在使用helm创建mongo安装时指定大小。

    例如:

    helm install mongo-replicaset --name whatever --set persistentVolume.size=100Gi
    

    在您的值中。yaml文件,您有一个名为持久性的部分,当它应该被称为持久性卷时。

    我建议您的值。yaml仅包含要更改的值,而不是所有内容。

     类似资料:
    • 3.1. 访问权限暴露 数据库使用中需要关注的主要问题之一是访问权限即用户名及密码的暴露。在编程中为了方便,一般都会用一个db.inc文件保存,如: CODE: <?php $db_user = 'myuser'; $db_pass = 'mypass'; $db_host = '127.0.0.1'; $db = mysql_connect($db_host, $db_user, $db_pas

    • 我正在使用 1.5.0 版的 swagger-jersey2-jaxrs。我正在尝试使用以下网址禁用 swagger 的公共访问, 尝试了从谷歌找到的许多可能的解决方案,但没有成功。 这些是静态实现,其中没有显式的swagger配置或配置的属性。 还有人在传统的实现方式上面临类似的问题吗?

    • 主要内容:1.概述,2.doExportUrls,3. Protocol1.概述 Dubbo 服务暴露有两种方式 本地暴露,JVM 本地调用。配置如下: <dubbo:service scope=“local” /> <dubbo:service scope=“remote” /> 在不配置 scope 的情况下,默认两种方式都暴露。 2.doExportUrls 本地暴露服务的顺序图如下: 我们看到 ServiceConfig#export() 方法中,会在配置初始

    • 如果你的服务需要预热时间,比如初始化缓存,等待相关资源就位等,可以使用 delay 进行延迟暴露。我们在 Dubbo 2.6.5 版本中对服务延迟暴露逻辑进行了细微的调整,将需要延迟暴露(delay > 0)服务的倒计时动作推迟到了 Spring 初始化完成后进行。你在使用 Dubbo 的过程中,并不会感知到此变化,因此请放心使用。 Dubbo-2.6.5 之前版本 延迟到 Spring 初始化完

    • EXPOSE 声明端口 格式为 EXPOSE <端口1> [<端口2>...]。 EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,

    • 8.1. 源码暴露 你的WEB服务器必须要能够读取你的源确并执行它,这就意味着任意人所写的代码被服务器运行时,它同样可以读取你的源码。在一个共享主机上,最大的风险是由于WEB服务器是共享的,因此其它开发者所写的PHP代码可以读取任意文件。 <?php header('Content-Type: text/plain'); readfile($_GET['file']); ?> 通过在你的源码所在的