如何访问Kubernetes部署 [英] How to access Kubernetes deployment

查看:84
本文介绍了如何访问Kubernetes部署的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了Docker映像,并在最少数量的计算机上将其部署在k8s集群中,设置了一个主服务器和工作服务器,并且两台计算机都已启动并正在运行,并且使用相同的VLAN网络相互通信.

I have created Docker images and deployed in k8s cluster with a minimum number of machines, setup one master and worker and both machines are up and running and talking to each other with the same VLAN network.

请找到以下状态描述的pod和部署服务

Please find the below pod and deployment services with described status

root@jenkins-linux-vm:/home/admin# kubectl describe services angular-service
Name:                     angular-service
Namespace:                pre-release
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"angular-service","namespace":"pre-release"},"spec":{"ports":[{"no...
Selector:                 app=frontend-app
Type:                     NodePort
IP:                       10.96.151.155
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  31000/TCP
Endpoints:                10.32.0.6:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

root@jenkins-linux-vm:/home/admin# kubectl get pods
NAME                                  READY   STATUS    RESTARTS   AGE
angular-deployment-7b8d45f48d-b59pv   1/1     Running   0          51m

root@jenkins-linux-vm:/home/admin# kubectl get svc
NAME              TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
angular-service   NodePort   10.96.151.155   <none>        80:31000/TCP   64m


root@jenkins-linux-vm:/home/admin# kubectl get pods --selector="app=frontend-app" --output=wide
NAME                                  READY   STATUS    RESTARTS   AGE   IP          NODE               NOMINATED NODE   READINESS GATES
angular-deployment-7b8d45f48d-b59pv   1/1     Running   0          52m   10.32.0.6   poc-worker2   <none>           <none>

root@jenkins-linux-vm:/home/admin# kubectl describe pods angular-deployment-7b8d45f48d-b59pv
Name:         angular-deployment-7b8d45f48d-b59pv
Namespace:    pre-release
Priority:     0
Node:         poc-worker2/10.0.0.6
Start Time:   Tue, 21 Jan 2020 05:15:49 +0000
Labels:       app=frontend-app
              pod-template-hash=7b8d45f48d
Annotations:  <none>
Status:       Running
IP:           10.32.0.6
IPs:
  IP:           10.32.0.6
Controlled By:  ReplicaSet/angular-deployment-7b8d45f48d
Containers:
  frontend-app:
    Container ID:   docker://751a9fb4a5e908fa1a02eb0460ab1659904362a727a028fdf72489df663a4f69
    Image:          frontend-app:future-master-fix-d1afa608
    Image ID:       docker://sha256:0099587db89de9ef999a7d1f087d4781e73c491b17e89392e92b08d2f935ad27
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Tue, 21 Jan 2020 05:15:54 +0000
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-r67p7 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-r67p7:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-r67p7
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>

现在的问题是,即使它也不能在Web浏览器中运行,我也无法使用端口访问我的应用程序.

Now the problem is I'm not able to access my application using a port, even though its not working in a web browser as well.

curl http://<public-node-ip>:<node-port>

curl http://10.0.0.6:31000

Dockr文件

FROM node:latest as node
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build --prod

# stage 2
FROM nginx:alpine
COPY --from=node /app/dist/hello-angular /usr/share/nginx/html

root@jenkins-linux-vm:/home/admin# kubectl exec -it angular-deployment-7b8d45f48d-b59pv curl 10.96.151.155:80
curl: (7) Failed to connect to 10.96.151.155 port 80: Connection refused
command terminated with exit code 7

root@jenkins-linux-vm:/home/admin/kubernetes# kubectl run busybox --image=busybox --restart=Never -it --rm --command -- /bin/sh -c "wget 10.96.208.252:80;cat index.html"
Connecting to 10.96.208.252:80 (10.96.208.252:80)
saving to 'index.html'
index.html           100% |********************************|   593  0:00:00 ETA
'index.html' saved
<!doctype html><html lang="en"><head><meta charset="utf-8"><title>AngularApp</title><base href="/"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" type="image/x-icon" href="favicon.ico"><link href="styles.9c0ad738f18adc3d19ed.bundle.css" rel="stylesheet"/></head><body><app-root></app-root><script type="text/javascript" src="inline.720eace06148cc3e71aa.bundle.js"></script><script type="text/javascript" src="polyfills.f20484b2fa4642e0dca8.bundle.js"></script><script type="text/javascript" src="main.11bc84b3b98cd0d00106.bundle.js"></script></body></html>pod "busybox" deleted

root@jenkins-linux-vm:/home/admin/kubernetes# kubectl run busybox --image=busybox --restart=Never -it --rm --command -- /bin/sh -c "wget 10.0.0.6:32331;cat index.html"
Connecting to 10.0.0.6:32331 (10.0.0.6:32331)
wget: can't connect to remote host (10.0.0.6): Connection refused
cat: can't open 'index.html': No such file or directory
pod "busybox" deleted
pod pre-release/busybox terminated (Error)

推荐答案

我要从docker hub获取一个预制的角度图像,这要归功于https://github.com/nheidloff/web-apps-kubernetes/tree/master/angular-app,我们将在下面将该图像用作基线.

I am taking a pre-built angular image from docker hub with thanks to https://github.com/nheidloff/web-apps-kubernetes/tree/master/angular-app we will use this image as baseline below.

使用以下yamls创建,部署和服务

Deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: angular-app
spec:
  replicas: 1
  selector:
    matchLabels:
      run: angular-app
  template:
    metadata:
      labels:
        run: angular-app
    spec:
      containers:
      - name: angular-app
        image: nheidloff/angular-app
        ports:
        - containerPort: 80
        - containerPort: 443

Service.yaml

apiVersion: v1
kind: Service
metadata:
  name: angular-app
  labels:
    run: angular-app
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  - port: 443
    protocol: TCP
    name: https
  selector:
    run: angular-app

在集群上按以下方式运行以创建资源

$ kubectl create -f Deployment.yaml
$ kubectl create -f Service.yaml

应该导致下面的部署和服务配置

    $ kubectl get all -o wide
NAME                               READY   STATUS    RESTARTS   AGE     IP            NODE         NOMINATED NODE   READINESS GATES

pod/angular-app-694d97d56c-7m4x4   1/1     Running   0          8m23s   10.244.3.10   k8s-node-3   <none>           <none>

NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE     SELECTOR
service/angular-app   NodePort    10.96.150.136   <none>        80:32218/TCP,443:30740/TCP   8m23s   run=angular-app
service/kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP                      8d      <none>

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS    IMAGES                  SELECTOR
deployment.apps/angular-app   1/1     1            1           8m23s   angular-app   nheidloff/angular-app   run=angular-app

NAME                                     DESIRED   CURRENT   READY   AGE     CONTAINERS    IMAGES                  SELECTOR
replicaset.apps/angular-app-694d97d56c   1         1         1       8m23s   angular-app   nheidloff/angular-app   pod-template-hash=694d97d56c,run=angular-app

从上面我们可以看到Pod正在运行node-3,因此请确定节点3的ip 并且我们发现该服务已在端口32218/TCP和30740/TCP之下暴露了

From above we can see the pod is running node-3 , so identify the ip of node 3 and we see that service has exposed below ports 32218/TCP and 30740/TCP

$ kubectl get nodes -o wide
NAME           STATUS   ROLES    AGE   VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
master-1   Ready    master   8d    v1.17.0   111.112.113.107   <none>        Ubuntu 16.04.6 LTS   4.4.0-169-generic   docker://18.6.2
node-1     Ready    <none>   8d    v1.17.0   111.112.113.108   <none>        Ubuntu 16.04.6 LTS   4.4.0-169-generic   docker://18.6.2
node-2     Ready    <none>   8d    v1.17.0   111.112.113.109   <none>        Ubuntu 16.04.6 LTS   4.4.0-169-generic   docker://18.6.2
node-3     Ready    <none>   8d    v1.17.0   111.112.113.110   <none>        Ubuntu 16.04.6 LTS   4.4.0-169-generic   docker://18.6.2

因此,我们需要通过屏幕下方的url检查来访问应用程序vi node3:NodePort,即111.112.113.110:32218,以及如何访问应用程序.

So we need to access the app vi node3:NodePort i.e 111.112.113.110:32218 as url check below screen shot as well on how i access the app.

我在群集级别具有以下规则,以允许浏览器访问默认NodePort范围内的应用.

注意:入口IPv4 TCP 30000-32767 0.0.0.0/0

NOTE : Ingress IPv4 TCP 30000 - 32767 0.0.0.0/0

这篇关于如何访问Kubernetes部署的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆