0

我在 Windows 11 笔记本电脑上使用 Oracle Virtual Box 创建了两个 Ubuntu VM。我使用 kubeadm 和这两个 Ubuntu 虚拟机设置了一个 k8s 集群,其中一个是主节点,另一个是工作节点。两个节点都运行 Ubuntu 20.04.3 LTS 和 docker://20.10.7。我将我的 Spring Boot 应用程序部署到了 k8s 集群中,并为我的 Spring Boot 应用程序公开了一个节点端口服务,端口为 30000,但我不确定如何在集群外的 Internet 上访问我的节点端口服务。你能帮我解决这个问题吗?

kubectl 获取节点 -o 宽 kubectl 获取 svc -o 宽

以下是我在 k8s 集群中节点的 IP 地址 - master [192.168.254.94] 和 worker [192.168.254.95]。我尝试使用以下网址,但没有一个有效

http://192.168.254.94:30000/swagger-ui.html http://192.168.254.95:30000/swagger-ui.html

上面这些 url 抛出消息,上面写着拒绝连接

http://192.168.9.13:30000/swagger-ui.html http://192.168.9.14:30000/swagger-ui.html

以上这些网址表示无法访问该网站

下面是我的 application.yaml 的内容,我用于部署 spring boot 应用程序及其相应的服务

apiVersion: apps/v1
kind: Deployment
metadata:
   name: dealer-engine
spec:
   replicas: 1
   selector:
      matchLabels:
         app: dealer-engine
   template:
      metadata:
        labels:
           app: dealer-engine
      spec:
         containers:
            - name: dealer-engine
              image: moviepopcorn/dealer_engine:0.0.1
              ports:
                 - containerPort: 9090
              env:
                 - name: MONGO_URL
                   value: mongodb://mongo-service:27017/mazda
              imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
   name: dealer-engine
spec:
   type: NodePort
   selector:
      app: dealer-engine
   ports:
      - port: 9091
        targetPort: 9090
        nodePort: 30000
   externalIPs:
    - 10.0.0.12

我是 k8s 的初学者,所以请帮助我了解如何在我的 k8s 集群之外访问我的节点端口服务。

4

2 回答 2

1

我创建了一个新的简单 Springboot 应用程序,它返回“Hello world!!!” 当调用以下端点“/helloWorld”时返回给用户。我使用以下 yaml 配置将此 Spring Boot 应用程序部署到我的 k8s 集群中

apiVersion: apps/v1
kind: Deployment
metadata:
   name: hello-world
spec:
   replicas: 1
   selector:
      matchLabels:
         app: hello-world
   template:
      metadata:
        labels:
           app: hello-world
      spec:
         containers:
            - name: hello-world
              image: moviepopcorn/hello_world:0.0.1
              ports:
                 - containerPort: 9091
              imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
   name: hello-world
spec:
   type: NodePort
   selector:
      app: hello-world
   ports:
      - port: 9091
        targetPort: 9091
        nodePort: 30001

成功部署后,我可以使用以下 url <K8S_MASTER_NODE_IP>:<NODE_PORT (30001)> 访问 helloWorld 端点。

谢谢大家的回答和投入。非常感谢。

于 2022-02-15T22:09:13.053 回答
0

你有没有安装像法兰绒这样的 CNI 插件?

如果是,请在此处检查您的 CIDR 设置

kubectl get node k8s-master -o yaml | grep podCIDR:
kubectl get configmap -n kube-system kube-flannel-cfg -o yaml | grep '"Network":'

基本上是的,CNI 是必须的。法兰绒是最简单的一种。

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network

您必须部署基于容器网络接口 (CNI) 的 Pod 网络插件,以便您的 Pod 可以相互通信。在安装网络之前,集群 DNS (CoreDNS) 不会启动。

  1. 在每台服务器上下载 cni pulgin。
# download cni plugin
wget https://github.com/containernetworking/plugins/releases/download/v0.9.1/cni-plugins-linux-amd64-v0.9.1.tgz
sudo mkdir -p /opt/cni/bin
sudo tar -xzvf cni-plugins-linux-amd64-v0.9.1.tgz -C /opt/cni/bin
  1. 重置集群
kubeadm reset
  1. 使用 cidr 设置初始化集群必须与 flannel 配置相同,默认10.244.0.0
kubeadm init --pod-network-cidr=10.244.0.0/16
  1. 应用 cni 插件。
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
于 2022-02-14T06:28:03.303 回答