Как я могу настроить ssl сертификаты на kubernetes / istio, чтобы мой сайт мог получить к нему доступ через https? - PullRequest
0 голосов
/ 08 февраля 2020

Я создал секрет, выполнив следующие команды

kubectl создать -n секрет по умолчанию tls istio-ingressgateway-certs --key private.pem --cert certificate.crt

Я применил следующее конфигурация

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: nginx-gateway
  namespace: default
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  #- port:
      #number: 80
      #name: http
      #protocol: HTTP
  - port:
      number: 443
      name: tls
      protocol: TLS
    tls:
      mode: PASSTHROUGH    
      #serverCertificate:     /var/www/vhosts/sample.com/cert/certificate..crt
      #privateKey: /var/www/vhosts/sample.com/cert/private.pem
    hosts:
    - "sample.com"

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: nginx
  namespace: default  
spec:
  hosts:
  - sample.com
  gateways:
  - nginx-gateway
  tls:
  - match:
    - port: 443
      sni_hosts:
      - sample.com
    route:
    - destination:
        host: nginx
        port:
          number: 443

kind: Service
apiVersion: v1
metadata:
  name: nginx
  namespace: default    
  labels:
    tier: backend
    app: nginx
    run: nginx
spec:
  ports:
    - protocol: TCP
      port: 443
      #targetPort: 443
      #nodePort: 32380
  selector:
    tier: backend
    app: nginx
    run: nginx

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default    
  labels:
    tier: backend
    app: nginx
    run: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
      tier: backend
      run: nginx
  template:
    metadata:
      labels:
        app: nginx
        tier: backend
        run: nginx
    spec:
      volumes:
      - name: dir
        hostPath:
          path: /code
      - name: config
        configMap:
          name: nginx-config
          items:
          - key: config
            path: site.conf
      - name: istio-ingressgateway-certs
        secret:
          secretName: istio-ingressgateway-certs
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: dir
          mountPath: /code
        - name: config
          mountPath: /etc/nginx/conf.d
        - name: istio-ingressgateway-certs
          mountPath: /etc/istio-ingressgateway-certs
          readOnly: true          
        ports:
        - containerPort: 443
          name: https
          protocol: TCP

и всякий раз, когда я выполняю

kubectl exe c -it $ (kubectl get pod -l run = nginx -n по умолчанию -o jsonpath = {. items..metadata.name}) -n knocialapp - c istio-proxy - curl -v -k --resolve sample.com:443:192.168.0.13 https://sample.com

моя учебная ссылка выглядит следующим образом

https://istio.io/docs/tasks/traffic-management/ingress/ingress-sni-passthrough/#configure -an-ingress-gateway

, пример в приведенном выше коде работает нормально. но с моими настройками это не работает. не могли бы вы объяснить, что я делаю неправильно, так как я действительно новичок в Kubernetes и istio. все, что я хочу сделать, это получить доступ к моим приложениям, используя https://192.168.0.13: 443

...