簡體   English   中英

如何使用 ExternalName 服務訪問通過入口公開的內部服務

[英]How to use an ExternalName service to access an internal service that is exposed with ingress

我正在本地機器 minikube 集群中嘗試一個可能的 kubernetes 場景。 它是使用 ExternalName 服務從另一個集群訪問一個集群中通過入口暴露的內部服務。 我知道使用入口可以在集群內訪問該服務。 當我在本地使用 minikube 進行嘗試時,我無法使用同時運行的集群。 因為我只是想驗證是否可以使用 ExternName 服務訪問入口暴露服務。

我使用minikube tunnel

我可以使用http://k8s-yaml-hello.info訪問該服務。

但是當我在運行的 POD 中嘗試curl k8s-yaml-hello-internal時,我的錯誤是curl: (7) Failed to connect to k8s-yaml-hello-internal port 80 after 1161 ms: Connection refused

誰能在這里指出我的問題? 提前致謝。

服務.yaml

apiVersion: v1
kind: Service
metadata:
  name: k8s-yaml-hello
spec:
  selector:
    app: k8s-yaml-hello
  ports:
  - port: 3000
    targetPort: 3000

入口.yaml

kind: Ingress
metadata:
  name: k8s-yaml-hello-ingress
  labels:
    name: k8s-yaml-hello-ingress
spec:
  rules:
  - host: k8s-yaml-hello.info
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: k8s-yaml-hello
            port: 
              number: 3000

外部名稱.yaml

apiVersion: v1
kind: Service
metadata:
  name: k8s-yaml-hello-internal
spec:
  ports:
  - name: ''
    appProtocol: http
    protocol: TCP
    port: 3000
  type: ExternalName
  externalName: k8s-yaml-hello.info

等/主機

    127.0.0.1   k8s-yaml-hello.info

當您收到error curl: (7) Failed to connect

上面的錯誤消息意味着沒有 web 服務器在指定的 IP 和端口以及指定的(或隱含的)端口上運行。

使用nano /etc/hosts檢查 IP 和端口是否指向正確的域。 如果它沒有指向,請提供正確的 IP 和端口。

有關詳細信息,請參閱此SO

在 Ingress.Yaml 中使用端口 80,在 service.yaml 中端口也應該是 80。服務端口和目標端口應該不同根據你的 yaml 它是相同的。 將其更改為 80 並試一試,如果您遇到任何錯誤,請在此處發布。

問題是minikube tunnel默認綁定到本地主機地址 127.0.0.1。 每個節點、機器、虛擬機、容器等都有自己的相同本地主機地址。 它是在不需要知道網絡接口的 ip 地址的情況下訪問本地服務(該服務在“我自己”上運行)。 因此,當 k8s-yaml-hello.info 解析為 127.0.0.1 時,它指向不同的服務,具體取決於您所在的容器(僅針對我自己)。

為了讓它像你想要的那樣工作,你首先必須找出你的主機網絡接口的IP地址,例如使用ifconfig 它的名稱類似於 eth0 或 en0,具體取決於您的系統。

然后你可以使用minikube tunnelbind-address選項來綁定到該地址:

minikube tunnel --bind-address=192.168.1.10

有了這個,您的服務應該可以從容器內訪問。 請先檢查 ip 地址:

curl http://192.168.1.10

然后使用dignslookupgetent hosts或容器中可用的類似內容,確保使用 /etc/hosts 的名稱解析在您的容器中有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM