Truy cập ứng dụng được triển khai từ bên ngoài cụm Kubernetes

1. Truy cập ứng dụng từ bên ngoài cụm Kubernetes

  • Tạo dịch vụ (Service)
[root@k8s-master java-demo]# vim  java_demo_service.yaml
[root@k8s-master java-demo]# cat java_demo_service.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    app: java-demo
  name: java-demo
spec:
  type: NodePort # loại dịch vụ
  ports:
  - port: 8080 # cổng dịch vụ
    protocol: TCP # giao thức
    targetPort: 8080 # cổng container
    nodePort: 30009  # cổng để truy cập từ bên ngoài, có thể chỉ định
  selector:
    app: java-demo # nhãn để liên kết với Pod

  • Áp dụng cấu hình
[root@k8s-master java-demo]# kubectl apply -f java_demo_service.yaml 
service/java-demo created

  • Kiểm tra dịch vụ
[root@k8s-master java-demo]# kubectl get pods,service -o wide 
NAME                             READY   STATUS             RESTARTS   AGE    IP               NODE        NOMINATED NODE   READINESS GATES
pod/java-demo-747ff448bd-tg79z   1/1     Running            0          44m    10.244.169.133   k8s-node2   <none>           <none>
pod/java-demo-747ff448bd-xcn26   1/1     Running            0          44m    10.244.36.75     k8s-node1   <none>           <none>
pod/java-demo-758759777d-xtqfq   0/1     CrashLoopBackOff   15         37m    10.244.36.76     k8s-node1   <none>           <none>
pod/nginx-6799fc88d8-bvg8q       1/1     Running            0          2d1h   10.244.169.129   k8s-node2   <none>           <none>

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE    SELECTOR
service/java-demo    NodePort    10.102.88.32    <none>        8080:30009/TCP   96s    app=java-demo
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          2d5h   <none>
service/nginx        NodePort    10.104.177.22   <none>        80:30337/TCP     2d1h   app=nginx

  • Kiểm tra dịch vụ
[root@k8s-master java-demo]# curl 10.108.255.86:8080

<html>
<head lang="en">
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title>Ứng dụng "Đưa cô gái về nhà"</title>
	<meta name="description" content="Ứng dụng "Đưa cô gái về nhà"">
	<meta name="keywords" content="index">
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <meta name="renderer" content="webkit">
 	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
	<meta http-equiv="Cache-Control" content="no-siteapp" />
	<link rel="stylesheet" href="../js/layui/css/layui.css" media="all">
	<link rel="stylesheet" href="../css/reset.css">
    <link rel="stylesheet" href="../css/supersized.css">
    <link rel="stylesheet" href="../css/style.css">
    <link rel="stylesheet" href="../css/typeit.css">
    <link rel="stylesheet" href="../css/date.css">
</head>
<body>
<!-- ![](../images/logo.png) -->
<div class="page-container">
            <h1 class="title"></h1>
            <div style="margin-top: 15%;">
            	<button class="layui-btn layui-btn-lg layui-btn-primary layui-btn-radius" onclick="adduser()">Thêm cô gái</button>
                <button class="layui-btn layui-btn-lg layui-btn-primary layui-btn-radius" onclick="queryuserList()">Hôm nay ai sẽ thắng?</button>
            </div>
         <!--    <div style="text-align:center;clear:both" class="date">
			</div> -->
			<!-- <div class="connect">
                <p>Liên hệ tác giả: Tử Binh</p>
                <p>
                    <a class="qq" target="_blank" href="http://wpa.qq.com/msgrd?Menu=no&Exe=QQ&Uin=125720240"></a>
                    <a class="twitter" href=""></a>
                </p>
            </div> -->
        </div>
        <script src="../js/jquery-1.8.2.min.js"></script>
        <script src="../js/layui/layui.js"></script>
        <script src="../js/supersized.3.2.7.min.js"></script>
        <script src="../js/supersized-init.js"></script>
        <script src="../js/typeit.js"></script>
        <script src="../js/date.js"></script>
        <script src="../js/index.js"></script>
        <script type="text/javascript">
        	 $('.title').typeIt({
           	  whatToType: "Ở đây có rất nhiều cô gái, hãy chọn một người về nhà!",
              typeSpeed: 300,
              lifeLike: true,
              breakLines :true
        	}, function() {
        		  console.log('Hàm callback của tomcat!');
        	});
         </script>
</body>
</html>


2 Sử dụng Ingress để cung cấp dịch vụ từ bên ngoài

2.1 Viết tệp cấu hình Ingress

[root@k8s-master java-demo]# vim java-ingress.yaml 
[root@k8s-master java-demo]# cat java-ingress.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: java-demo
spec:
  rules:
  - host: test.scajy.cn
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: java-demo      # tên dịch vụ load balancer
            port:
              number: 8080       # cổng của dịch vụ load balancer

2.2 Khởi động dịch vụ

[root@k8s-master java-demo]# kubectl apply -f java-ingress.yaml 
ingress.networking.k8s.io/java-demo created

2.3 Kiểm tra dịch vụ

Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
NAME        CLASS    HOSTS            ADDRESS   PORTS   AGE
java-demo   <none>   java.scajy.org             80      69s

2.5 Cấu hình hosts để truy cập

[root@k8s-master java-demo]# kubectl get pods -n ingress-nginx  -o wide
NAME                                       READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
nginx-ingress-controller-5dc64b58f-lltls   1/1     Running   0          30m   10.100.24.83   k8s-node1   <none>           <none>

  • Kiểm tra bằng trình duyệt

Thẻ: Kubernetes Service NodePort Ingress Networking

Đăng vào ngày 8 tháng 8 lúc 16:30