Kubernetes Pod拒绝彼此连接

时间:2019-08-22 15:02:32

标签: kubernetes elastic-stack minikube

我正在尝试通过Minikube在Kubernetes中实现ElasticStack。我刚刚开始,因为我基本上是从头开始写所有东西,以便更好地了解K8,并且因为Elastic提供的yml并没有解释为什么要做的任何事情,所以我正在做自己的事情

我遇到的问题是,尽管我已经在Pod上设置了必要的服务和端口,但是我的Kibana-pod无法与ElasticSearch-pod通信。

奇怪的是

kubectl port-forward services/elastic-http 9200

可以正常工作,并让我从ElasticSearch窗格中获取信息。但是,当我通过

进入广告连播
kubectl exec -it <pod-name> -- /bin/bash

并尝试使用curl获取我的浏览器刚刚显示给我的相同信息,连接被拒绝,并且我的pod不会互相交谈。

我的配置如下。

Kibana.yml

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: my-kb
  namespace: default
spec:
  selector:
    matchLabels:
      app: kibana
  template:
    metadata:
      name: kibana
      labels:
        app: kibana
    spec:
      containers:
      - name: kibana
        image: docker.elastic.co/kibana/kibana:7.3.0
        ports:
        - containerPort: 5601
          name: kibana-web
        volumeMounts:
        - name: kb-conf
          mountPath: /usr/share/kibana/config/kibana.yml
          subPath: kibana.yml
      volumes:
        - name: kb-conf
          configMap:
            name: kibana-config
            items:
            - key: kibana.yml
              path: kibana.yml
---
kind: Service
apiVersion: v1
metadata:
  name: kibana-http
  namespace: default
spec:
  selector:
    app: kibana
  ports:
    - protocol: TCP
      port: 5601
      name: kibana-web
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: kibana-config
  namespace: default
data:
  kibana.yml: |
    elasticsearch.hosts: ["http://elastic-http.default.svc:9200"]

ElasticSearch.yml

kind: PersistentVolume
apiVersion: v1
metadata:
  name: elastic-pv
  namespace: default
spec:
  capacity:
    storage: 15Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: elastic-pv-claim
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 15Gi
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: elastic-deploy
  namespace: default
spec:
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      name: elasticsearch
      labels:
        app: elasticsearch
    spec:
      containers:
        - name: elasticsearch
          image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
          ports:
          - containerPort: 9200
            name: elastic-http
            protocol: TCP
          - containerPort: 9300
            name: node-sniffer
            protocol: TCP
          #readinessProbe:
          #  httpGet:
          #    port: 9200
          #  periodSeconds: 5
          volumeMounts:
          - name: elastic-conf
            mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
            subPath: elasticsearch.yml
          - name: elastic-data
            mountPath: /var/data
          securityContext:
            privileged: true
      initContainers:
      - name: sysctl-adj
        image: busybox
        command: ['sysctl', '-w', 'vm.max_map_count=262144']
        securityContext:
          privileged: true
      volumes:
        - name: elastic-data
          persistentVolumeClaim:
            claimName: elastic-pv-claim
        - name: elastic-conf
          configMap:
            name: elastic-config
            items:
            - key: elasticsearch.yml
              path: elasticsearch.yml
---
kind: Service
apiVersion: v1
metadata:
  name: elastic-http
  namespace: default
spec:
  selector:
    app: elasticsearch
  ports:
    - port: 9200
      targetPort: elastic-http
      name: elastic-http
    - port: 9300
      targetPort: node-sniffer
      name: node-finder
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: elastic-config
  namespace: default
data:
  elasticsearch.yml: |
    xpack.security.enabled: false
    node.master: true
    path.data: /var/data
    http.port: 9200

2 个答案:

答案 0 :(得分:0)

我认为您具有clusterIP服务类型,如果要在浏览器中查看它,选项之一就是将服务类型设置为NodePort。

您可以查看更多详细信息here

答案 1 :(得分:0)

我不确定服务中的这一部分:

targetPort: elastic-http
targetPort: node-sniffer

您能否尝试将其删除并重试