使用端口转发来访问集群中的应用
目录
准备工作:
1.你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。
2.安装 MongoDB Shell
此处我的环境为CentOS7,故选择正确的操作系统。
一、创建 MongoDB Deployment 和服务
1.创建一个运行 MongoDB 的 Deployment:
[root@master mongodb]# pwd
/home/app/k8s/mongodb
[root@master mongodb]# ls
mongodb-mongosh-shared-openssl11-1.5.4.x86_64.rpm mongo-deployment.yaml mongo-service.yaml
[root@master mongodb]# cat mongo-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo
labels:
app.kubernetes.io/name: mongo
app.kubernetes.io/component: backend
spec:
selector:
matchLabels:
app.kubernetes.io/name: mongo
app.kubernetes.io/component: backend
replicas: 1
template:
metadata:
labels:
app.kubernetes.io/name: mongo
app.kubernetes.io/component: backend
spec:
containers:
- name: mongo
image: mongo:4.2
args:
- --bind_ip
- 0.0.0.0
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 27017
执行创建指令:
[root@master mongodb]# kubectl apply -f mongo-deployment.yaml
deployment.apps/mongo created # 成功执行的命令的输出可以证明创建了 Deployment
[root@master mongodb]# kubectl get pods # 查看 Pod 状态,检查其是否准备就绪
NAME READY STATUS RESTARTS AGE
mongo-7bd6cfb5b8-dwk6h 1/1 Running 0 43s
nfs-client-provisioner-6f48556457-7lrz4 1/1 Running 4 (6m50s ago) 3h5m
nfs-client-provisioner-6f48556457-gbvfp 1/1 Terminating 1 20d
[root@master mongodb]# kubectl get deployment # 查看 Deployment 状态
NAME READY UP-TO-DATE AVAILABLE AGE
mongo 1/1 1 1 52s
nfs-client-provisioner 1/1 1 1 20d
[root@master mongodb]# kubectl get replicaset # 该 Deployment 自动管理一个 ReplicaSet。查看该 ReplicaSet 的状态
NAME DESIRED CURRENT READY AGE
mongo-7bd6cfb5b8 1 1 1 67s
nfs-client-provisioner-6f48556457 1 1 1 20d
# 输出显示 ReplicaSet 已被创建
2.创建一个在网络上公开的 MongoDB 服务:
yaml文件:
[root@master mongodb]# cat mongo-service.yaml
apiVersion: v1
kind: Service
metadata:
name: mongo
labels:
app.kubernetes.io/name: mongo
app.kubernetes.io/component: backend
spec:
ports:
- port: 27017
targetPort: 27017
selector:
app.kubernetes.io/name: mongo
app.kubernetes.io/component: backend
进行创建:
[root@master mongodb]# kubectl apply -f mongo-service.yaml
service/mongo created # 成功执行的命令的输出可以证明 Service 已经被创建
检查所创建的 Service:
[root@master mongodb]# kubectl get service mongo
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mongo ClusterIP 10.98.5.153 <none> 27017/TCP 7s
# 输出显示已被创建的 Service
验证 MongoDB 服务是否运行在 Pod 中并且在监听 27017 端口:
[root@master mongodb]# kubectl get pod mongo-7bd6cfb5b8-dwk6h --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
27017
# 将 mongo-7bd6cfb5b8-dwk6h 改为你自己创建的 Pod 名称,此处的为我创建的pod。
# 27017 是分配给 MongoDB 的互联网 TCP 端口。
二、转发一个本地端口到 Pod 端口
kubectl port-forward
允许使用资源名称 (例如 Pod 名称)来选择匹配的 Pod 来进行端口转发。
[root@master mongodb]# kubectl port-forward mongo-7bd6cfb5b8-dwk6h 28015:27017 # 此处pod名称也要换成自己的pod名
# 以上所有命令都有效。输出类似于:
Forwarding from 127.0.0.1:28015 -> 27017
Forwarding from [::1]:28015 -> 27017
kubectl port-forward
不会返回,所以我们重新打开一个新的终端,进行MongoDB Shell
的安装和测试。
三、安装MongoDB Shell,进行测试
1.将下载好的rpm包上传到本地,使用yum或rpm进行安装:
[root@master mongodb]# ls
mongodb-mongosh-shared-openssl11-1.5.4.x86_64.rpm mongo-deployment.yaml mongo-service.yaml
[root@master mongodb]# yum -y install mongodb-mongosh-shared-openssl11-1.5.4.x86_64.rpm
Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Examining mongodb-mongosh-shared-openssl11-1.5.4.x86_64.rpm: mongodb-mongosh-shared-openssl11-1.5.4-1.el8.x86_64
Marking mongodb-mongosh-shared-openssl11-1.5.4.x86_64.rpm to be installed
Resolving Dependencies
There are unfinished transactions remaining. You might consider running yum-complete-transaction, or "yum-complete-transaction --cleanup-only" and "yum history redo last", first to finish them. If those don't work you'll have to try removing/installing packages by hand (maybe package-cleanup can help).
--> Running transaction check
---> Package mongodb-mongosh-shared-openssl11.x86_64 0:1.5.4-1.el8 will be installed
--> Processing Dependency: libcrypto.so.1.1(OPENSSL_1_1_0)(64bit) for package: mongodb-mongosh-shared-openssl11-1.5.4-1.el8.x86_64
Loading mirror speeds from cached hostfile
* base: mirrors.huaweicloud.com
* epel: mirror.01link.hk
* extras: mirrors.aliyun.com
* updates: mirrors.njupt.edu.cn
--> Processing Dependency: libcrypto.so.1.1(OPENSSL_1_1_0g)(64bit) for package: mongodb-mongosh-shared-openssl11-1.5.4-1.el8.x86_64
--> Processing Dependency: libcrypto.so.1.1(OPENSSL_1_1_1)(64bit) for package: mongodb-mongosh-shared-openssl11-1.5.4-1.el8.x86_64
--> Processing Dependency: libcrypto.so.1.1(OPENSSL_1_1_1b)(64bit) for package: mongodb-mongosh-shared-openssl11-1.5.4-1.el8.x86_64
--> Processing Dependency: libcrypto.so.1.1(OPENSSL_1_1_1e)(64bit) for package: mongodb-mongosh-shared-openssl11-1.5.4-1.el8.x86_64
--> Processing Dependency: libssl.so.1.1(OPENSSL_1_1_0)(64bit) for package: mongodb-mongosh-shared-openssl11-1.5.4-1.el8.x86_64
--> Processing Dependency: libssl.so.1.1(OPENSSL_1_1_1)(64bit) for package: mongodb-mongosh-shared-openssl11-1.5.4-1.el8.x86_64
--> Processing Dependency: libcrypto.so.1.1()(64bit) for package: mongodb-mongosh-shared-openssl11-1.5.4-1.el8.x86_64
--> Processing Dependency: libssl.so.1.1()(64bit) for package: mongodb-mongosh-shared-openssl11-1.5.4-1.el8.x86_64
--> Running transaction check
---> Package openssl11-libs.x86_64 1:1.1.1k-4.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================================================================================================
Package Arch Version Repository Size
===============================================================================================================================================================
Installing:
mongodb-mongosh-shared-openssl11 x86_64 1.5.4-1.el8 /mongodb-mongosh-shared-openssl11-1.5.4.x86_64 199 M
Installing for dependencies:
openssl11-libs x86_64 1:1.1.1k-4.el7 epel 1.5 M
Transaction Summary
===============================================================================================================================================================
Install 1 Package (+1 Dependent package)
Total size: 201 M
Total download size: 1.5 M
Installed size: 203 M
Downloading packages:
openssl11-libs-1.1.1k-4.el7.x86_64.rpm | 1.5 MB 00:00:07
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : 1:openssl11-libs-1.1.1k-4.el7.x86_64 1/2
Installing : mongodb-mongosh-shared-openssl11-1.5.4-1.el8.x86_64 2/2
Verifying : 1:openssl11-libs-1.1.1k-4.el7.x86_64 1/2
Verifying : mongodb-mongosh-shared-openssl11-1.5.4-1.el8.x86_64 2/2
Installed:
mongodb-mongosh-shared-openssl11.x86_64 0:1.5.4-1.el8
Dependency Installed:
openssl11-libs.x86_64 1:1.1.1k-4.el7
Complete!
2.启动 MongoDB 命令行接口:
mongosh --port 28015
[root@master mongodb]# mongosh --port 28015
Current Mongosh Log ID: 6322ee0798d2ff8df88c399f
Connecting to: mongodb://127.0.0.1:28015/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.5.4
Using MongoDB: 4.2.17
Using Mongosh: 1.5.4
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.
------
The server generated these startup warnings when booting
2022-09-15T09:14:59.248+0000:
2022-09-15T09:14:59.249+0000: ** WARNING: Access control is not enabled for the database.
2022-09-15T09:14:59.249+0000: ** Read and write access to data and configuration is unrestricted.
2022-09-15T09:14:59.249+0000:
2022-09-15T09:14:59.249+0000:
2022-09-15T09:14:59.249+0000: ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2022-09-15T09:14:59.249+0000: ** We suggest setting it to 'never'
2022-09-15T09:14:59.249+0000:
------
------
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()
------
test>
3.在 MongoDB 命令行提示符下,输入 ping 命令:
test> db.runCommand( { ping: 1 } )
{ ok: 1 } #成功的 ping 请求返回