从 Minikube 内部访问外部 SQL 服务器时出错
Error accessing External SQL server from inside the Minikube
我有一个外部 SQL 服务器,(在 Internet 上可从我的本地系统访问)我试图从 Minikube 内部调用它。我做不到。我试过
Calling an external service from within Minikube
我收到的错误是 "sqlalchemy.exc.OperationalError: (pymssql.OperationalError) (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist "
我已经创建了 pod --> service --> Endpoints。我所有的集群都在入口下。请参阅下面的代码了解我所做的配置。
目前,我正在将 DB HOST (1.1.1.1) 作为环境变量传递给 POD,在此配置之后,我试图传递服务名称 (sql-server) 而不是 DB主机名是否正确?
此外,我无法从容器内部 ping IP。
谁能帮帮我。
apiVersion: v1
kind: Endpoints
metadata:
name: sql-server
subsets:
- addresses:
- ip: 1.1.1.1
ports:
- port: 1433
apiVersion: v1
kind: Service
metadata:
name: sql-server
spec:
type: ClusterIP
ports:
- port: 1433
targetPort: 1433
我在我的 minikube 系统中重现了一个类似的场景,这个解决方案按描述工作。我将指导您完成设置以及如何解决此问题。
我有一个 linux 服务器(主机名 http-server),我在上面安装了一个 http 服务器 (apache2),它提供一个 hello world 消息:
user@http-server:~$ netstat -tan | grep ::80
tcp6 0 0 :::80 :::* LISTEN
user@minikube-server:~$ curl 10.128.15.209
Hello World!
现在我们确认我的服务可以从我安装了 minikube 的机器访问,让我们连接到 minikube VM 并检查我是否可以访问这个 http 服务:
user@minikube-server:~$ minikube ssh
_ _
_ _ ( ) ( )
___ ___ (_) ___ (_)| |/') _ _ | |_ __
/' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)
$ curl 10.128.15.209
Hello World!
太棒了!这看起来不错。如果你不能在这里访问你的服务,你必须检查你的网络,有什么东西阻止你的 minikube 服务器与你的服务通信。
现在让我们退出这个 minikube ssh 并创建我们的端点:
我的端点清单如下所示:
apiVersion: v1
kind: Endpoints
metadata:
name: http-server
subsets:
- addresses:
- ip: 10.128.15.209
ports:
- port: 80
user@minikube-server:~$ kubectl apply -f http-server-endpoint.yaml
endpoints/http-server configured
让我们创建我们的服务:
apiVersion: v1
kind: Service
metadata:
name: http-server
spec:
ports:
- port: 80
targetPort: 80
user@minikube-server:~$ kubectl apply -f http-server-service.yaml
service/http-server created
正在检查我们的服务是否存在并保存它的 clusterIP 以供字母使用:
user@minikube-server:~$$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
http-server ClusterIP 10.96.228.220 <none> 80/TCP 30m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10d
现在是时候验证我们是否可以从 pod 访问我们的服务了:
kubectl run ubuntu -it --rm=true --restart=Never --image=ubuntu bash
此命令将在 ubuntu pod 中创建并打开 bash 会话。
在我的例子中,我将安装 curl 以检查我是否可以访问我的 http 服务器。您可能需要安装 mysql:
root@ubuntu:/# apt update; apt install -y curl
正在使用 clusterIP 检查与我的服务的连接:
root@ubuntu:/# curl 10.128.15.209:80
Hello World!
最后使用服务名称 (DNS):
root@ubuntu:/# curl http-server
Hello World!
请运行完成所有这些步骤,如果您在任何地方遇到问题,请告诉我。
我有一个外部 SQL 服务器,(在 Internet 上可从我的本地系统访问)我试图从 Minikube 内部调用它。我做不到。我试过 Calling an external service from within Minikube
我收到的错误是 "sqlalchemy.exc.OperationalError: (pymssql.OperationalError) (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist "
我已经创建了 pod --> service --> Endpoints。我所有的集群都在入口下。请参阅下面的代码了解我所做的配置。
目前,我正在将 DB HOST (1.1.1.1) 作为环境变量传递给 POD,在此配置之后,我试图传递服务名称 (sql-server) 而不是 DB主机名是否正确? 此外,我无法从容器内部 ping IP。
谁能帮帮我。
apiVersion: v1
kind: Endpoints
metadata:
name: sql-server
subsets:
- addresses:
- ip: 1.1.1.1
ports:
- port: 1433
apiVersion: v1
kind: Service
metadata:
name: sql-server
spec:
type: ClusterIP
ports:
- port: 1433
targetPort: 1433
我在我的 minikube 系统中重现了一个类似的场景,这个解决方案按描述工作。我将指导您完成设置以及如何解决此问题。
我有一个 linux 服务器(主机名 http-server),我在上面安装了一个 http 服务器 (apache2),它提供一个 hello world 消息:
user@http-server:~$ netstat -tan | grep ::80
tcp6 0 0 :::80 :::* LISTEN
user@minikube-server:~$ curl 10.128.15.209
Hello World!
现在我们确认我的服务可以从我安装了 minikube 的机器访问,让我们连接到 minikube VM 并检查我是否可以访问这个 http 服务:
user@minikube-server:~$ minikube ssh
_ _
_ _ ( ) ( )
___ ___ (_) ___ (_)| |/') _ _ | |_ __
/' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)
$ curl 10.128.15.209
Hello World!
太棒了!这看起来不错。如果你不能在这里访问你的服务,你必须检查你的网络,有什么东西阻止你的 minikube 服务器与你的服务通信。
现在让我们退出这个 minikube ssh 并创建我们的端点:
我的端点清单如下所示:
apiVersion: v1
kind: Endpoints
metadata:
name: http-server
subsets:
- addresses:
- ip: 10.128.15.209
ports:
- port: 80
user@minikube-server:~$ kubectl apply -f http-server-endpoint.yaml
endpoints/http-server configured
让我们创建我们的服务:
apiVersion: v1
kind: Service
metadata:
name: http-server
spec:
ports:
- port: 80
targetPort: 80
user@minikube-server:~$ kubectl apply -f http-server-service.yaml
service/http-server created
正在检查我们的服务是否存在并保存它的 clusterIP 以供字母使用:
user@minikube-server:~$$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
http-server ClusterIP 10.96.228.220 <none> 80/TCP 30m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10d
现在是时候验证我们是否可以从 pod 访问我们的服务了:
kubectl run ubuntu -it --rm=true --restart=Never --image=ubuntu bash
此命令将在 ubuntu pod 中创建并打开 bash 会话。
在我的例子中,我将安装 curl 以检查我是否可以访问我的 http 服务器。您可能需要安装 mysql:
root@ubuntu:/# apt update; apt install -y curl
正在使用 clusterIP 检查与我的服务的连接:
root@ubuntu:/# curl 10.128.15.209:80
Hello World!
最后使用服务名称 (DNS):
root@ubuntu:/# curl http-server
Hello World!
请运行完成所有这些步骤,如果您在任何地方遇到问题,请告诉我。