mysql - 如何检查部署的应用程序是否可以访问 mysql、rabbitmq 等 Kubernetes 服务

标签 mysql kubernetes rabbitmq

我是 Kubernetes 新手。我正在尝试在 Kubernetes 中部署基于微服务架构的 springboot Web 应用程序。我已经在 OpenStack 上设置了 Kubernetes。所有 Kubernetes 服务都运行良好。

我关注了https://github.com/fabric8io/gitcontroller/tree/master/vendor/k8s.io/kubernetes/examples/javaweb-tomcat-sidecar

部署示例 springboot 应用程序

https://www.mkyong.com/spring-boot/spring-boot-hello-world-example-jsp/

我可以在localhost:8080看到网络应用程序和<'node-ip'>:8080 .

但是我尝试部署的应用程序需要MySQL和rabbitmq,所以我使用yaml创建了MySQL和rabbitmq服务文件(javaweb.yaml):

javaweb.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  type: NodePort
  ports:
  - protocol: TCP
    port: 3306
    targetPort: 3306
  selector:
    app: mysql
---
apiVersion: v1
kind: Service
metadata:
  # Expose the management HTTP port on each node
  name: rabbitmq-management
  labels:
    app: rabbitmq
spec:
  type: NodePort # Or LoadBalancer in production w/ proper security
  ports:
  - port: 15672
    name: http
  selector:
    app: rabbitmq
---
apiVersion: v1
kind: Service
metadata:
  # The required headless service for StatefulSets
  name: rabbitmq
  labels:
    app: rabbitmq
spec:
  ports:
  - port: 5672
    name: amqp
  - port: 4369
    name: epmd
  - port: 25672
    name: rabbitmq-dist
  clusterIP: None
  selector:
    app: rabbitmq
---
apiVersion: v1
kind: Pod
metadata:
  name: javaweb
spec:
  containers:
  - image: chakravarthych/sample:v1
    name: war
    volumeMounts:
    - mountPath: /app
      name: app-volume
  - image: mysql:5.7
    name: mysql
    ports:
    - protocol: TCP
      containerPort: 3306
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: root123
    command: ["sh","-c","service mysql start; tail -f /dev/null"]
  - image: rabbitmq:3.7-management
    name: rabbitmq
    ports:
    - name: http
      protocol: TCP
      containerPort: 15672
    - name: amqp
      protocol: TCP
      containerPort: 5672
    command: ["sh","-c","service rabbitmq-server start; tail -f /dev/null"]
  - image: tomcat:8.5.33
    name: tomcat
    volumeMounts:
    - mountPath: /usr/local/tomcat/webapps
      name: app-volume
    ports:
    - containerPort: 8080
      hostPort: 8080
    command: ["sh","-c","/usr/local/tomcat/bin/startup.sh; tail -f /dev/null"]
  volumes:
  - name: app-volume
    emptyDir: {}

当我尝试通过 localhost:8080 访问我的应用程序时或 <'node-ip'>:8080 我看到一个空白页。

命令kubectl get all -o wide给了我以下输出:

NAME          READY     STATUS    RESTARTS   AGE       IP              NODE         NOMINATED NODE
pod/javaweb   4/4       Running   0          1h        192.168.9.123   kube-node1   <none>

NAME                          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                       AGE       SELECTOR
service/kubernetes            ClusterIP   10.96.0.1       <none>        443/TCP                       3d        <none>
service/mysql                 NodePort    10.101.253.11   <none>        3306:30527/TCP                1h        app=mysql
service/rabbitmq              ClusterIP   None            <none>        5672/TCP,4369/TCP,25672/TCP   1h        app=rabbitmq
service/rabbitmq-management   NodePort    10.108.7.162    <none>        15672:30525/TCP               1h        app=rabbitmq

这表明MySQL和rabbitmq正在运行。

我的问题是如何检查我的应用程序是否可以访问 Kubernetes 中运行的 MySQL 和rabbitmq 服务。

注意:

我只能通过192.168.9.123:15672访问rabbitmq。

我还可以登录 Docker 容器内的 MySQL。

最佳答案

您是否在 springboot pod 上尝试过“kubectl log”?您可能已经知道出了什么问题。

关于mysql - 如何检查部署的应用程序是否可以访问 mysql、rabbitmq 等 Kubernetes 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52063548/

相关文章:

azure - 可以在 Kubernetes 群集上或使用 Azure Kubernetes 服务 (AKS) 预配 SharePoint 2016 场吗?

python - rabbitmq 使用 pika 线程

c# - 如何在 Masstransit 发布中忽略命名空间

php - mysqli 持久连接

php - 我可以使用 MYSQLI 和 PHP 将多个值绑定(bind)为单个参数吗?

mysql - propercase mysql udf

elasticsearch - 将RabbitMQ连接到Logstash的RCP

php - mysql 在 php 中使用空值左连接

apache-spark - k8s上的Spark-emptyDir未安装到目录

kubernetes - 将外部应用程序属性值传递给kubernetes部署