Модули не разрешают доменные имена службы через вход - PullRequest
0 голосов
/ 06 сентября 2018

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

для запуска моего миникуба я использую следующие команды (работающие на windows 10):
minikube start --vm-driver hyperv;
minikube addons enable kube-dns;
minikube addons enable ingress;

Это мой deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    run: hello-world
  name: hello-world
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      run: hello-world
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: hello-world
    spec:
      containers:
      - image: karthequian/helloworld:latest
        imagePullPolicy: Always
        name: hello-world
        ports:
        - containerPort: 80
          protocol: TCP
        resources: {}
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

это service.yaml:

apiVersion: v1                                                             
kind: Service                                                              
metadata:                                                                  
  labels:                                                                  
    run: hello-world                                                       
  name: hello-world                                                        
  namespace: default                                                       
  selfLink: /api/v1/namespaces/default/services/hello-world                
spec:                                                                      
  ports:                                                                   
  - nodePort: 31595                                                        
    port: 80                                                               
    protocol: TCP                                                          
    targetPort: 80                                                         
  selector:                                                                
    run: hello-world                                                       
  sessionAffinity: None                                                    
  type: ExternalName
  externalName: minikube.local.com                                                           
status:                                                                    
  loadBalancer: {}                                                        

это мой ingress.yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: minikube-local-ingress
spec:
  rules:
  - host: minikube.local.com
    http:
      paths:
      - path: /
        backend:
          serviceName: hello-world
          servicePort: 80

Итак, если я зайду внутрь модуля hello-world и из /bin/bash запустится curl minikube.local.com или nslookup minikube.local.com.

Так как я могу убедиться, что модули могут разрешать DNS-имя службы? Я знаю, что могу указать hostAlias в определении развертывания, но есть ли автоматический способ обновления DNS для kubernetes?

1 Ответ

0 голосов
/ 06 сентября 2018

Итак, вы хотите выставить свое приложение на Minikube? Я только что попробовал его, используя тип сервиса ClusterIP по умолчанию (по сути, удаляя ExternalName материал, который у вас был) и этот файл YAML Я могу увидеть ваш сервис на https://192.168.99.100, где контроллер Ingress живет:

screen shot of hello-world app in browser

Сервис теперь выглядит так:

apiVersion: v1
kind: Service
metadata:
  labels:
    run: hello-world
  name: hello-world
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    run: hello-world

И вход:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: minikube-local-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host:
    http:
      paths:
      - path: /
        backend:
          serviceName: hello-world
          servicePort: 80

Примечание. В пределах кластера ваша служба теперь доступна через hello-world.default (это DNS-имя, назначенное Kubernetes внутри кластера), и извне вам необходимо сопоставить ее, скажем, от hello-world.local до 192.168.99.100 в вашем /etc/hosts файл на вашем хост-компьютере.

В качестве альтернативы, если вы измените ресурс Ingress на - host: hello-world.local, то вы сможете (с хоста) связаться с вашим сервисом, используя это полное доменное имя, например: curl -H "Host: hello-world.local" 192.168.99.100.

...