从 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!

请运行完成所有这些步骤,如果您在任何地方遇到问题,请告诉我。