【问题标题】:Kubernetes pods refusing connections to each otherKubernetes Pod 拒绝相互连接
【发布时间】:2019-08-22 15:02:32
【问题描述】:

我正在尝试通过 Minikube 在 Kubernetes 中实现 ElasticStack。我几乎没有开始,因为我基本上是从头开始编写所有内容以更好地了解 K8s,并且因为 Elastic 提供的 yml 没有提供任何关于为什么做了什么的解释,所以我正在做我自己的事情.

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

奇怪的是

kubectl port-forward services/elastic-http 9200

完美运行,让我可以从我的 ElasticSearch pod 中获取信息。但是,当我通过

进入一个吊舱时
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

【问题讨论】:

    标签: kubernetes elastic-stack minikube


    【解决方案1】:

    我认为您使用的是 clusterIP 服务类型,如果您想在浏览器中查看它,其中一个选项是将服务类型设置为 NodePort。

    您可以查看更多详情here

    【讨论】:

    • 问题是,我可以在浏览器中看到它。但是,我的 pod 不相互通信,如果我尝试“kubectl describe pod elastic-deploy-XXXXX-XXXX”,它只会显示与端口 9200 的连接被拒绝。
    【解决方案2】:

    我不确定这部分的服务:

    targetPort: elastic-http
    targetPort: node-sniffer
    

    您可以尝试删除它们并重试吗

    【讨论】:

    • 我刚刚尝试过,因为我在另一个指南中看到了类似的内容,如何使用服务在 k8s 中设置某些内容(显然想复制它)。它也不适用于数值。
    猜你喜欢
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2020-09-11
    • 2020-11-06
    • 2021-04-19
    相关资源
    最近更新 更多