Использование Kubernetes с Skaffold и запуск Next JS приводит к появлению сообщения «Ваше соединение не является частным» под HTTPS в Chrome - PullRequest
0 голосов
/ 20 июня 2020

Я использую Skaffold с несколькими приложениями в разработке:

Skaffold.yaml

apiVersion: skaffold/v2alpha3
kind: Config
deploy:
  kubectl:
    manifests:
      - ./infra/k8s/*
build:
  local:
    push: false
  artifacts:    
    - image: MYDOCKERID/client
      context: client
      docker:
        dockerfile: Dockerfile
      sync:
        manual:
          - src: '**/*.js'
            dest: .

Dockerfile клиента:

FROM node:alpine

WORKDIR /app
COPY package.json .
RUN npm install
COPY . .

CMD ["npm", "run", "dev"]

client-depl.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: client
  template:
    metadata:
      labels:
        app: client
    spec:
      containers:
        - name: client
          image: MYDOCKERID/client
---
apiVersion: v1
kind: Service
metadata:
  name: client-srv
spec:
  selector:
    app: client
  ports:
    - name: client
      protocol: TCP
      port: 3000
      targetPort: 3000

При выполнении skaffold dev из командной строки все компилируется отлично:

[92m[client-depl-5bdc8cffcd-s9z9r client] [0mevent - compiled successfully
[92m[client-depl-5bdc8cffcd-s9z9r client] [0mwait  - compiling...
[92m[client-depl-5bdc8cffcd-s9z9r client] [0mAttention: Next.js now collects completely anonymous telemetry regarding usage.
[92m[client-depl-5bdc8cffcd-s9z9r client] [0mThis information is used to shape Next.js' roadmap and prioritize features.
[92m[client-depl-5bdc8cffcd-s9z9r client] [0mYou can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:
[92m[client-depl-5bdc8cffcd-s9z9r client] [0mhttps://nextjs.org/telemetry
[92m[client-depl-5bdc8cffcd-s9z9r client] [0m
[92m[client-depl-5bdc8cffcd-s9z9r client] [0mevent - compiled successfully

Я добавил домен в файл Hosts в папке Windows et c:

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost
#   ::1             localhost

127.0.0.1 ticketing.dev

Однако при вводе Chrome ticketing.dev я получаю:

введите описание изображения здесь

Как запустить приложение в Chrome и преодолеть это сообщение?

1 Ответ

1 голос
/ 22 июня 2020

У вас отсутствует сертификат для безопасного подключения. Вам также потребуется настроить ingress для использования созданного вами сертификата.

Вы должны прочитать Управление сертификатами TLS в кластере .

Kubernetes предоставляет certificates.k8s.io API, который позволяет вам предоставлять сертификаты TLS, подписанные центром сертификации (CA), который вы контролируете. Эти ЦС и сертификаты могут использоваться вашими рабочими нагрузками для установления sh доверия.

Вы можете прочитать хорошее руководство о том, как добавить поддержку SSL / TLS в приложения в Kubernetes. -native way .

Вы можете создать самозаверяющий сертификат, в этой средней статье показано, как это сделать на Windows.

На Linux вы можете сделать следующее:

[root]# mkdir certs
[root]# openssl req -nodes -newkey rsa:2048 -keyout certs/ticketing.key -out certs/ticketing.csr -subj "/C=/ST=/L=/O=/OU=/CN=default"
[root]# openssl x509 -req -sha256 -days 365 -in certs/ticketing.csr -signkey certs/ticketing.key -out certs/ticketing.crt

Это создаст сертификат, действительный в течение 365 дней. Затем создайте secret, который будет содержать ваш сертификат:

kubectl create secret generic ticketing-certs --from-file=certs -n default

Как только сертификат и secret будут готовы, вы должны создать ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example1-ingress
spec:
tls:
  - hosts:
    - www.ticketing.dev
    secretName: ticketing-cert
  rules:
  - host: www.ticketing.dev
  http:
   paths:
   - path: /
   backend:
     serviceName: client-srv
     servicePort: 3000

Дайте мне знать если тебе нужно еще что-нибудь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...