Kubernetes连接服务和部署

问题描述 投票:-1回答:2

我想知道在单独的部署中要指定什么以便使其访问数据库部署/服务。这是数据库部署/服务:

apiVersion: v1
kind: Service
metadata:
  name: oracle-db
  labels:
    app: oracle-db
spec:
  ports:
  - name: oracle-db
    port: 1521
    protocol: TCP
    targetPort: 1521
  selector:
    app: oracle-db
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: oracle-db-depl
  labels:
    app: oracle-db
spec:
  selector:
    matchLabels:
      app: oracle-db
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: oracle-db
    spec:
      containers:
      - name: oracle-db
        image: oracledb:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 1521
        env:
          ...

我如何在单独的部署中指定连接?是否在某处指定oracle-db服务名称?到目前为止,我在容器中指定了containerPort。

kubernetes
2个回答
2
投票

如果其他应用程序部署在相同的名称空间中,则可以通过oracle-db引用oracle服务。这是一个使用oracle的word-press应用程序的示例。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
      - image: wordpress:4.8-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: oracle-db
        ports:
        - containerPort: 80
          name: wordpress

您可以看到,oracle-db将oracle服务作为环境变量引用。

如果服务与应用程序部署所在的名称空间不同,则可以将其称为oracle-db.namespacename.svc.cluster.local

https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/


1
投票

Kubernetes中的服务是“将运行在一组Pod上的应用程序公开为网络服务的抽象方法”。 (k8s documentation

您可以通过Kubernetes为其提供的IP和端口访问您的Pod,但这不是一个好习惯,因为Pod可能会死亡,并且将创建另一个Pod(如果由Deployment / ReplicaSet控制)。创建新IP后,将使用新IP,您应用中的所有内容都会开始失败。

要解决此问题,您可以使用服务公开Pod(已经完成),然后使用分配给服务的service-name:service-port访问Pod。在这种情况下,即使Pod死亡并创建了一个新Pod,Kubernetes也会继续将流量转发到正确的Pod。

© www.soinside.com 2019 - 2024. All rights reserved.