从Minikube内部访问外部SQL服务器时出错

时间:2020-03-20 13:56:45

标签: kubernetes kubectl kubernetes-ingress minikube

我有一个试图从Minikube内部调用的外部SQL服务器(在可从本地系统访问的Internet上)。我无法做到这一点。我试过了 Calling an external service from within Minikube

我得到的错误是“ sqlalchemy.exc.OperationalError:(pymssql.OperationalError)(20009,b'DB-Lib错误消息20009,严重性9:\ n无法连接:Adaptive Server不可用或没有不存在“


我已经创建了pod->服务->端点。我所有的集群都处于侵入状态。请参阅以下代码,了解我已完成的配置。

当前,我将DB HOST(1.1.1.1)作为环境变量传递给POD,并且在此配置之后,我试图传递服务名(sql-server)而不是DB Host Name是否正确? 而且,我无法从容器内部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

1 个答案:

答案 0 :(得分:1)

我在我的minikube系统中重现了类似的情况,并且该解决方案按上述方式工作。我将引导您完成安装程序以及如何解决此问题。

我有一个linux服务器(主机名为http-server),并在其上安装了一个http服务器(apache2),该服务器提供问候消息:

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

现在是时候验证我们是否可以从吊舱中访问我们的服务了:

kubectl run ubuntu -it --rm=true --restart=Never --image=ubuntu bash

此命令将在ubuntu容器内创建并打开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!

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