首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问Kubernetes部署

如何访问Kubernetes部署
EN

Stack Overflow用户
提问于 2020-01-21 06:28:23
回答 4查看 1.4K关注 0票数 3

我已经创建了Docker映像,并在k8s集群中部署了最少数量的机器,设置了一个主服务器和一个工作人员,这两台机器都在同一个VLAN网络上运行和相互交谈。

请查找下面描述状态的吊舱和部署服务。

代码语言:javascript
复制
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浏览器中工作。

代码语言:javascript
复制
curl http://<public-node-ip>:<node-port>

curl http://10.0.0.6:31000

Dockr文件

代码语言:javascript
复制
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
代码语言:javascript
复制
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
代码语言:javascript
复制
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
代码语言:javascript
复制
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)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-01-21 13:18:29

我是采取一个从码头枢纽预先构建的角度图像感谢https://github.com/nheidloff/web-apps-kubernetes/tree/master/angular-app,我们将使用这个图像作为基线下面。

使用yamls下面的创建、部署和服务

Deployment.yaml

代码语言:javascript
复制
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

代码语言:javascript
复制
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

在集群上运行如下所示,以创建资源

代码语言:javascript
复制
$ kubectl create -f Deployment.yaml
$ kubectl create -f Service.yaml

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

代码语言:javascript
复制
    $ 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

从上面我们可以看到

正在运行节点-3,所以识别节点3的ip,我们看到服务暴露在端口32218/TCP和30740/TCP下面。

代码语言:javascript
复制
$ 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

,所以我们需要访问应用程序vi,node3:NodePort,i.111.112.113.110:32218,作为url检查屏幕截图下面,以及我如何访问应用程序。

I在集群级别上打开了以下规则,允许浏览器访问默认的NodePort范围内的应用程序.

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

票数 3
EN

Stack Overflow用户

发布于 2020-01-21 08:42:53

为了确保您能够通过浏览器中的nodeport打开您的应用程序,您应该尝试建立

在安全规则上没有阻止默认节点端口范围(即从端口30000到端口32767)的规则,在集群网络上也没有阻止防火墙的规则。

例如,验证在群集网络上打开了以下安全规则,以便节点端口范围在浏览器中工作。

代码语言:javascript
复制
Ingress IPv4    TCP 30000 - 32767   0.0.0.0/0

一旦您确认,您没有安全组规则问题。我将采用下面的方法进行调试,并在节点级别查找端口可达性的错误所在。执行基本测试并检查是否可以通过节点端口在浏览器上安装和访问nginx web服务器:

步骤:

使用下面的nginx.yaml部署NGINX部署

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 1
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80

验证部署是否已启动并运行

代码语言:javascript
复制
$ kubectl apply -f nginx.yaml

$ kubectl get all
NAME                            READY   STATUS        RESTARTS   AGE
pod/my-nginx-75897978cd-ptqv9   1/1     Running       0          32s

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   4d11h

NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/my-nginx   1/1     1            1           33s

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/my-nginx-75897978cd   1         1         1       33s

现在,创建服务,使用下面的示例公开nginx部署

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    run: my-nginx

验证服务已创建,标识指定的节点端口(因为我们没有在service.yaml中提供任何固定端口(如下面的节点端口为32502)

代码语言:javascript
复制
$ kubectl apply -f service.yaml

$ kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          4d11h
my-nginx     NodePort    10.96.174.234   <none>        8080:32502/TCP   12s

除了nodeport ,还可以识别主节点的ip,即下面的131.112.113.101

代码语言:javascript
复制
$ kubectl get nodes -o wide
NAME           STATUS   ROLES    AGE     VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
master-1   Ready    master   4d11h   v1.17.0   131.112.113.101   <none>        Ubuntu 16.04.6 LTS   4.4.0-169-generic   docker://18.6.2
node-1     Ready    <none>   4d11h   v1.17.0   131.112.113.102   <none>        Ubuntu 16.04.6 LTS   4.4.0-169-generic   docker://18.6.2
node-2     Ready    <none>   4d11h   v1.17.0   131.112.113.103   <none>        Ubuntu 16.04.6 LTS   4.4.0-169-generic   docker://18.6.2

现在,如果您试图在浏览器中使用节点值为<masternode>:<nodeport> (即131.112.113.101:32502)的主节点的IP来访问nginx应用程序,则应该得到如下所示的结果

Note -- nginx.yaml上使用的容器端口和service.yaml上的targetPort (即80) --您应该能够更好地理解这一点。希望这将有助于您在节点/集群级别(如果有的话)了解这个问题。

票数 2
EN

Stack Overflow用户

发布于 2020-01-21 06:52:29

我不知道我是否明白你想做什么。

下面的命令是打开荚中的bash外壳:

kubectl exec -it angular-deployment-7b8d45f48d-b59pv -- /bin/bash

你可以连接到一个吊舱,然后试试卷曲。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59835323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档