Spring DataSource в Kubernetes для MySQL

Я развернул в IBM Cloud базу данных MySQL и приложение Spring Boot с Kubernetes. База данных MySQL имеет развертывание и службу, но она не должна быть доступна снаружи, поэтому я дал ему IP-адрес кластера. Но приложение Spring балансирует нагрузку, потому что оно должно быть видно клиентам. Мой источник данных MySQL не работал, что я пишу в своем источнике данных spring. В локальном случае я пишу там просто localhost, но в облаке это не работает? Кто-нибудь знает, как это работает?

Deployment file: 
apiVersion: apps/v1 
kind: Deployment
metadata:
  name: db
  enviroment: test 
spec:
  selector:
    matchLabels:
      app: mysql
      enviroment: test
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
        enviroment: test
    spec:
      containers:
      - image: de.icr.io/test/mysql:5.7
        name: db
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: ************
        - name: MYSQL_USER
          value: ********
        - name: MYSQL_PASSWORD
          value: ***********
        - name: MYSQL_DATABASE
          value: *******
        ports:
        - containerPort: 3306
          name: db
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql   
      volumes:
         - name: mypvc
           persistentVolumeClaim:
           claimName: mysql-pv-claim

Это мои услуги:

apiVersion: v1
kind: Service 
metadata:
  name: mysqlservices 
spec:
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
  selector:
    app: mysql   
    enviroment: test

Я знаю, что вам не понадобится мой постоянный том, но я отправлю его.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
  labels:
   billingType: "monthly"
   region: eu-de
   zone: Frankfurt
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 20Gi
  storageClassName: ibmc-file-bronze

И, наконец, источник данных Spring Boot. Я не знаю, что я напишу в URL-адресе для соединения.

 <bean id = "dataSource"
        class = "org.springframework.jdbc.datasource.DriverManagerDataSource"
        primary = "true">
        <property name = "driverClassName"
            value = "com.mysql.jdbc.Driver" />
        <property name = "url"
            value = "jdbc:mysql://db/nlfb?useSSL=false" />

        <property name = "username" value = "*****" />
        <property name = "password" value = "******" />
    </bean>

с уважением и благодарностью за вашу помощь.

stackoverflow.com/questions/43078601/… Дубликат
sitakant 30.07.2019 12:48

Поделитесь своими файлами yaml. Служба mysql доступна с именем службы внутри кластера (поскольку тип службы mysql — clusterIP).

Malathi 30.07.2019 14:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
315
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны использовать имя службы Kubernetes Deployments. Что связано с конкретным развертыванием, т.е. если ваше имя службы db и оно размещено в пространстве имен dev, вам нужно написать dev.db

Другие вопросы по теме