Kubernetes tomcat容器中的kubernates网络python服务器

Kubernetes tomcat容器中的kubernates网络python服务器,kubernetes,Kubernetes,首先,我很抱歉语法可能不正确,因为我使用了谷歌翻译 1.在Kubernetes环境中部署吊舱和服务 apiVersion: v1 kind: Pod metadata: name: testml labels: app: testml-pod spec: containers: - name: testmlserver image: test_ml_server:2.8 ports: - containerPort: 8080 -

首先,我很抱歉语法可能不正确,因为我使用了谷歌翻译

1.在Kubernetes环境中部署吊舱和服务

apiVersion: v1
kind: Pod
metadata:
  name: testml
  labels:
    app: testml-pod
spec:
  containers:
  - name: testmlserver
    image: test_ml_server:2.8
    ports:
      - containerPort: 8080
      - containerPort: 5100
    env:
      - name: POD_NAME
        valueFrom:
          fieldRef:
            fieldPath: metadata.name
    volumeMounts:
      - name: testserver-api
        mountPath: /app/test/api
      - name: testmlserver-csv
        mountPath: /app/test/csv

  - name: testmldb
    image: test_ml_db:1.4
    ports:
      - containerPort: 1433
    env:
      - name: POD_NAME
        valueFrom:
          fieldRef:
            fieldPath: metadata.name
    volumeMounts:
      - name: estmldb
        mountPath: /var/opt/mssql/data

  volumes:
  - name: testmlserver-api
    hostPath:
      path: /usr/testhostpath/testmlserver/api
  - name: testmlserver-csv
    hostPath:
      path: /usr/testmlhostpath/testserver/csv
  - name: testmldb
    hostPath:
      path: /usr/testmlhostpath/testmldb
部署服务器容器后,在容器中运行python服务器

apiVersion: v1
kind: Service
metadata:
  name: testml-service
spec:
  type: NodePort
  ports:
  - name: testml-server-port
    port: 8080
    targetPort: 8080
    protocol: TCP
    nodePort: 30080
  - name: testml-python-port
    port: 5100
    targetPort: 5100
    protocol: TCP
    nodePort: 30051

  - name: testml-db-port
    port: 1433
    targetPort: 1433
    protocol: TCP
    nodePort: 30014
  selector:
    app: test-pod
通过这种方式,POD和服务都得到了部署

连接到服务器(tomcat)容器并运行python服务器文件。 此时,从web调用python服务器时使用的地址值为'http://testml:5100' 我试着写它,并与它交流。 然而,出现了跨源读阻塞(CORB) 我也试过了http://localhost:5100因为在一个容器中还有另一种通信方式,但康奈特拒绝了

在docker compose环境中,我检查了与localhost通信时是否调用了python服务器,但我不知道kubernets环境中错误的原因

apiVersion: v1
kind: Pod
metadata:
  name: testml
  labels:
    app: testml-pod
spec:
  containers:
  - name: testmlserver
    image: test_ml_server:2.8
    ports:
      - containerPort: 8080
      - containerPort: 5100
    env:
      - name: POD_NAME
        valueFrom:
          fieldRef:
            fieldPath: metadata.name
    volumeMounts:
      - name: testserver-api
        mountPath: /app/test/api
      - name: testmlserver-csv
        mountPath: /app/test/csv

  - name: testmldb
    image: test_ml_db:1.4
    ports:
      - containerPort: 1433
    env:
      - name: POD_NAME
        valueFrom:
          fieldRef:
            fieldPath: metadata.name
    volumeMounts:
      - name: estmldb
        mountPath: /var/opt/mssql/data

  volumes:
  - name: testmlserver-api
    hostPath:
      path: /usr/testhostpath/testmlserver/api
  - name: testmlserver-csv
    hostPath:
      path: /usr/testmlhostpath/testserver/csv
  - name: testmldb
    hostPath:
      path: /usr/testmlhostpath/testmldb
通过检查服务器(tomcat)容器中的端口,可以确认0.0.0.0不仅适用于python端口。

如何在服务器容器中正常调用python服务器?

  • 在web服务器(tomcat)中,通过pod名称连接db容器,如下所示。POD名称=>testml

    <property name="url" value="jdbc:log4jdbc:sqlserver://testml:1433;database=test_ml;autoReconnect=true" />
    
    
    
  • 同样,我尝试用pod名称连接python服务器,但失败了


我认为除非您有一个定义的连接,否则无法通过连接。您可以通过
Pod的
IP进行连接,但这不是推荐的方法,因为Pod的IP是动态的,并且可以在更新过程中更改

但是,由于您也创建了一个
服务
对象,因此您可以使用它的名称作为
http://testml-service:port


此外,由于
服务
对象是类型,您也可以通过集群节点的IP进行连接。

我不想使用您的IP,因为它不好,我无法使用pod名称对其进行测试。例如,当您看到答案时,在调用python服务器时,是否需要与“http://testml服务:5100”进行通信?您也可以使用pod名称进行连接,但需要为其定义无头服务。我创建了一个无头服务,并尝试与“”通信,但失败了APIVATION:v1种类:服务元数据:名称:testml无头服务规范:类型:ClusterIP ClusterIP:无端口:-名称:web服务器端口:8080目标端口:8080协议:TCP-名称:python服务器端口:5100目标端口:5100协议:TCP-名称:数据库端口:1433目标端口:1433协议:TCP选择器:app:testml Pod您是否也将
主机名
子域
添加为在吊舱的
规格中有多少?另请参见中的示例,我认为无头服务不需要在服务中定义
类型
字段,有关无头服务的创建/使用,请查看此字段。