Google Kubernetes Engine Ingress TLS не работает - PullRequest
0 голосов
/ 08 октября 2018

Используя gitlab автоматический DevOps CI, он установил ingress контроллер:

spec:
  rules:
  - host: api.example.com
    http:
      paths:
      - backend:
          serviceName: production-auto-deploy
          servicePort: 5000
        path: /
  tls:
  - hosts:
    - api.example.com
    secretName: production-auto-deploy-tls
status:
  loadBalancer:
    ingress:
    - ip: xxx.xxx.xxx.xxx

http://api.example.com прекрасно работает, но https://api.example.com сначала выдает ошибку сертификата, а затем после добавленияисключение, которое я получаю 404 от Google Kubernetes Engine.

Почему сертификат TLS не настроен правильно?

Почему он не направляет хост к службе?

Балансировщик нагрузки

apiVersion: v1
kind: Service
spec:
  clusterIP: xxx.xxx.xxx.xxx
  externalTrafficPolicy: Cluster
  ports:
  - name: http
    nodePort: 30408
    port: 80
    protocol: TCP
    targetPort: http
  - name: https
    nodePort: 31101
    port: 443
    protocol: TCP
    targetPort: https
  selector:
    app: nginx-ingress
    component: controller
release: ingress

sessionAffinity: Нет Тип: LoadBalancer, состояние: loadBalancer: ingress: - ip:xxx.xxx.xxx.xxx

Вход

apiVersion: v1
kind: Service
spec:
  clusterIP: xxx.xxx.xxx.xxx
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: http
  selector:
    app: nginx-ingress
    component: default-backend
    release: ingress
  sessionAffinity: None
  type: ClusterIP

status:
  loadBalancer: {}

1 Ответ

0 голосов
/ 09 октября 2018

Хорошо, в конце я понимаю, что ты делаешь.Вы создаете сервис NGINX, который будет балансировать между вашими сервисами, как Ingress.Я не понимаю, как сервис NGINX с CLUSTER_IP может быть открыт для всего мира и служить входом.

Но вот план, что необходимо сделать, чтобы сервис GKE был доступен миру.1) настроенный сервис с clusterIp, который будет доступен для прослушивания в кластере k8s 2) настроенные правила входа.3) Если вы хотите использовать дополнительный входной контроллер на GKE, установите ваш контроллер.Вот пример того, как это может работать на GCLB. (В случае GCLB служба должна быть представлена ​​на NodePort, плохой дизайн)

service apiVersion: v1 kind: Service labels: app: service-nm name: service-name namespace: your-nm spec: externalTrafficPolicy: Cluster ports: - nodePort: 30200 port: 80 protocol: TCP targetPort: 3001 selector: app: operator sessionAffinity: None type: NodePort Igress apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.allow-http: false ingress.gcp.kubernetes.io/pre-shared-cert: np-ssl-certificate spec: rules: - host: your domain-name http: paths: - backend: serviceName: your-sn servicePort: 80 - host: your-domain-name Для получения более подробной информации об установке nginx на GKE https://cloud.google.com/community/tutorials/nginx-ingress-gke

...