算能2042上部署k8s¶
Kubernetes(简称 K8s,因为 K 和 s 之间有 8 个字母)是一个开源的容器编排平台,由 Google 设计并捐赠给云原生计算基金会(CNCF)管理。
k8s是一个“容器管家”。当需要同时运行几十、几百甚至上千个 Docker 容器时,手动管理它们几乎不可能。K8s 的核心价值在于它能自动帮用户部署、伸缩、管理这些容器应用,并提供服务发现与负载均衡、滚动更新与回滚等其他功能。如今,K8s 已成为云原生时代的基础设施标准,被全球数千家企业用于生产环境。

1 riscv版本官方支持情况¶
目前官方未提供riscv版本的工具以及镜像下载。但kubernets源码已经合入riscv实现。https://www.downloadkubernetes.com/

虽然目前官方没有支持riscv的镜像,我们还可以通过本地编译来部署k8s。
2 k8s环境搭建¶
硬件环境:算能SG2044 RISC-V服务器
OS版本:openEuler 24.03 (LTS)
2.1 containerd和runc安装¶
containerd:2.2.0
runc:v1.4.0
注意,由于这里验证的k8s版本为1.34最新版,所以containerd也要较新的才可以。
containerd编译安装到/usr/local/bin目录下:https://github.com/containerd/containerd.git
runc有预编译版本,解压后放到/usr/local/sbin目录下即可:https://github.com/opencontainers/runc/releases
2.2 k8s二进制工具编译安装¶
官方未提供riscv工具,需自己编译,本地编译二进制文件方法:
git clone https://github.com/kubernetes/kubernetes.git
cd kubernetes/
git checkout release-1.34
KUBE_BUILD_PLATFORMS=linux/riscv64 make GOFLAGS=-v
(myenv) [hyj@openeuler-riscv64 kubernetes]$ ls -l _output/local/go/bin/
total 875600
-rwxr-xr-x 1 hyj hyj 57147576 Nov 6 14:48 apiextensions-apiserver
-rwxr-xr-x 1 hyj hyj 122657536 Nov 6 14:51 e2e.test
-rwxr-xr-x 1 hyj hyj 114124816 Nov 6 14:54 e2e_node.test
-rwxr-xr-x 1 hyj hyj 10027300 Nov 6 14:49 ginkgo
-rwxr-xr-x 1 hyj hyj 2031908 Nov 6 14:48 go-runner
-rwxr-xr-x 1 hyj hyj 54919352 Nov 6 14:48 kube-aggregator
-rwxr-xr-x 1 hyj hyj 79626424 Nov 6 14:48 kube-apiserver
-rwxr-xr-x 1 hyj hyj 67240120 Nov 6 14:48 kube-controller-manager
-rwxr-xr-x 1 hyj hyj 2949304 Nov 6 14:46 kube-log-runner
-rwxr-xr-x 1 hyj hyj 42401976 Nov 6 14:48 kube-proxy
-rwxr-xr-x 1 hyj hyj 46399672 Nov 6 14:48 kube-scheduler
-rwxr-xr-x 1 hyj hyj 71303352 Nov 6 14:47 kubeadm
-rwxr-xr-x 1 hyj hyj 57999544 Nov 6 14:46 kubectl
-rwxr-xr-x 1 hyj hyj 57213112 Nov 6 14:47 kubectl-convert
-rwxr-xr-x 1 hyj hyj 56230180 Nov 6 14:49 kubelet
-rwxr-xr-x 1 hyj hyj 52494520 Nov 6 14:48 kubemark
-rwxr-xr-x 1 hyj hyj 1769656 Nov 6 14:46 mounter
(myenv) [hyj@openeuler-riscv64 kubernetes]$ kubelet --version
Kubernetes v1.34.1-62+79a8f71ff82983
(myenv) [hyj@openeuler-riscv64 kubernetes]$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"34+", EmulationMajor:"", EmulationMinor:"", MinCompatibilityMajor:"", MinCompatibilityMinor:"", GitVersion:"v1.34.1-62+79a8f71ff82983", GitCommit:"79a8f71ff8298346758d0b920f0981da3c0e9481", GitTreeState:"clean", BuildDate:"2025-11-06T03:42:24Z", GoVersion:"go1.24.9", Compiler:"gc", Platform:"linux/riscv64"}
(myenv) [hyj@openeuler-riscv64 kubernetes]$ kubectl version --client
Client Version: v1.34.1-62+79a8f71ff82983
Kustomize Version: v5.7.1
2.3 etcd编译安装¶
编译etcd,编译完成拷贝到/usr/local/bin使用
git clone https://github.com/etcd-io/etcd.git
git checkout release-3.6
GOOS=linux GOARCH=riscv64 ARCH=riscv64 GO_BUILD_FLAGS='-v -mod=readonly' ./scripts/build.sh
(myenv) [hyj@openeuler-riscv64 etcd]$ ls bin
etcd etcdctl etcdutl
2.4 编译安装coredns¶
用于给k8s提供地址解析服务。coredns官方已经有预编译版本,下载后解压即可
2.5 安装cni插件¶
在bin目录下生成的二进制文件拷贝到 /opt/cni/bin目录中即可。3 启动服务¶
3.1 启动containerd服务¶
3.1.1 containerd服务配置
指定启动containerd的binary位置,[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
#uncomment to enable the experimental sbservice (sandboxed) version of containerd/cri integration
#Environment="ENABLE_CRI_SANDBOXES=sandboxed"
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limits causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
3.1.2 containerd配置文件¶
生成配置文件:
vim /etc/containerd/config.toml,打开配置文件,修改pause镜像的位置,k8s官方pause镜像不支持riscv64,需要改为一个社区版本的 [plugins.'io.containerd.cri.v1.images'.pinned_images]
sandbox = 'portainer/pause-linux-riscv64:latest'
[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc.options]
BinaryName = '/usr/local/sbin/runc'
3.1.3 启动containerd¶
3.2 后台启动etcd¶
export ETCD_UNSUPPORTED_ARCH=riscv64
nohup etcd --listen-client-urls=http://127.0.0.1:2379 --advertise-client-urls=http://127.0.0.1:2379 > etcd.log 2>&1 &
[root@openeuler-riscv64 kubernetes]# netstat -ltnp | grep 2379
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 328510/etcd
3.3 启动coredns¶
3.4 启动apiserver¶
3.4.1 key和证书¶
准备key和证书,注意cnf文件中要增加本机地址,不然服务起不起来。
cat > /etc/kubernetes/apiserver.cnf <<EOF
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local
IP.1 = 127.0.0.1
IP.2 = 10.0.0.1
IP.3 = 10.230.214.24
IP.4 = 10.96.0.1
EOF
# 生成 API Server 证书
openssl genrsa -out /etc/kubernetes/pki/apiserver.key 2048
openssl req -new -key apiserver.key -out apiserver.csr -subj "/CN=kube-apiserver" -config apiserver.cnf
openssl x509 -req -in apiserver.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out apiserver.crt -days 365 -extensions v3_req -extfile apiserver.cnf
# 生成服务账户密钥
openssl genrsa -out /etc/kubernetes/pki/sa.key 2048
openssl rsa -in /etc/kubernetes/pki/sa.key -pubout -out /etc/kubernetes/pki/sa.pub
3.4.3 启动apiserver¶
nohup kube-apiserver --etcd-servers=http://127.0.0.1:2379 --bind-address=0.0.0.0 --secure-port=6443 --advertise-address=0.0.0.0 --authorization-mode=AlwaysAllow --anonymous-auth=false --service-account-issuer=api --service-account-key-file=/etc/kubernetes/pki/sa.pub --service-account-signing-key-file=/etc/kubernetes/pki/sa.key --client-ca-file=/etc/kubernetes/pki/ca.crt --tls-cert-file=/etc/kubernetes/pki/apiserver.crt --tls-private-key-file=/etc/kubernetes/pki/apiserver.key > kube-apiserver.log 2>&1 &
I1107 14:02:08.528381 432132 event.go:389] "Event occurred" object="kubernetes" fieldPath="" kind="ServiceCIDR" apiVersion="networking.k8s.io/v1" type="Warning" reason="KubernetesDefaultServiceCIDRInconsistent" message="The default ServiceCIDR [10.0.0.0/24] does not match the controller flag configurations [10.96.0.0/12]"
I1107 14:02:08.546086 432132 controller.go:667] quota admission added evaluator for: leases.coordination.k8s.io
I1107 14:02:08.548981 432132 cache.go:39] Caches are synced for autoregister controller
I1107 14:02:08.592676 432132 cache.go:39] Caches are synced for RemoteAvailability controller
I1107 14:02:08.595521 432132 cache.go:39] Caches are synced for APIServiceRegistrationController controller
I1107 14:02:08.595760 432132 shared_informer.go:356] "Caches are synced" controller="cluster_authentication_trust_controller"
I1107 14:02:08.648080 432132 handler_discovery.go:451] Starting ResourceDiscoveryManager
I1107 14:02:09.003985 432132 storage_scheduling.go:111] all system priority classes are created successfully or already exist.
3.5 启动 Controller Manager¶
3.5.1 准备证书¶
openssl genrsa -out /etc/kubernetes/pki/controller-manager.key 2048
openssl req -new -key /etc/kubernetes/pki/controller-manager.key -out /etc/kubernetes/pki/controller-manager.csr -subj "/CN=system:kube-controller-manager"
openssl x509 -req -in /etc/kubernetes/pki/controller-manager.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out /etc/kubernetes/pki/controller-manager.crt -days 365
3.5.2 配置文件¶
编写controller manager配置文件:vim /etc/kubernetes/controller-manager.conf
apiVersion: v1
kind: Config
clusters:
- name: local
cluster:
server: https://10.230.214.24:6443
certificate-authority: /etc/kubernetes/pki/ca.crt
users:
- name: system:kube-controller-manager
user:
client-certificate: /etc/kubernetes/pki/controller-manager.crt
client-key: /etc/kubernetes/pki/controller-manager.key
contexts:
- context:
cluster: local
user: system:kube-controller-manager
name: default
current-context: default
3.5.3 启动controller-manager¶
nohup kube-controller-manager --kubeconfig=/etc/kubernetes/controller-manager.conf --cluster-cidr=10.244.0.0/16 --allocate-node-cidrs=true --root-ca-file=/etc/kubernetes/pki/ca.crt --service-account-private-key-file=/etc/kubernetes/pki/sa.key > kube-controller-manager.log 2>&1 &
3.6 启动kube-scheduler¶
3.6.1 准备证书设置¶
openssl genrsa -out /etc/kubernetes/pki/scheduler.key 2048
openssl req -new -key /etc/kubernetes/pki/scheduler.key -out /etc/kubernetes/pki/scheduler.csr -subj "/CN=system:kube-scheduler"
openssl x509 -req -in /etc/kubernetes/pki/scheduler.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out /etc/kubernetes/pki/scheduler.crt -days 365
3.6.2 配置文件¶
vim /etc/kubernetes/scheduler.conf
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority: /etc/kubernetes/pki/ca.crt
server: https://127.0.0.1:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: system:kube-scheduler
name: system:kube-scheduler@kubernetes
current-context: system:kube-scheduler@kubernetes
users:
- name: system:kube-scheduler
user:
client-certificate: /etc/kubernetes/pki/scheduler.crt
client-key: /etc/kubernetes/pki/scheduler.key
3.6.3 启动scheduler¶
nohup kube-scheduler --kubeconfig=/etc/kubernetes/scheduler.conf --leader-elect=false > kube-scheduler.log 2>&1 &
3.7 启动proxy服务¶
3.7.1 准备证书¶
openssl genrsa -out /etc/kubernetes/pki/kube-proxy.key 2048
openssl req -new -key /etc/kubernetes/pki/kube-proxy.key -out /etc/kubernetes/pki/kube-proxy.csr -subj "/CN=system:kube-proxy"
openssl x509 -req -in /etc/kubernetes/pki/kube-proxy.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out /etc/kubernetes/pki/kube-proxy.crt -days 365
3.7.2 配置文件¶
tee /etc/kubernetes/kube-proxy-config.yaml > /dev/null <<EOF
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 0.0.0.0
clientConnection:
kubeconfig: /etc/kubernetes/kube-proxy.kubeconfig
clusterCIDR: 10.244.0.0/16
healthzBindAddress: 0.0.0.0:10256
kind: KubeProxyConfiguration
metricsBindAddress: 0.0.0.0:10249
mode: iptables
EOF
vim /etc/kubernetes/kube-proxy.kubeconfig
apiVersion: v1
kind: Config
clusters:
- name: local
cluster:
server: https://10.230.214.24:6443
certificate-authority: /etc/kubernetes/pki/ca.crt
users:
- name: kube-proxy
user:
client-certificate: /etc/kubernetes/pki/kube-proxy.crt
client-key: /etc/kubernetes/pki/kube-proxy.key
contexts:
- context:
cluster: local
user: kube-proxy
name: kube-proxy-context
current-context: kube-proxy-context
3.7.3 启动proxy¶
3.8 启动kubelet服务¶
3.8.1 生成证书¶
openssl genrsa -out /etc/kubernetes/pki/kubelet.key 2048
openssl req -new -key /etc/kubernetes/pki/kubelet.key -out /etc/kubernetes/pki/kubelet.csr -subj "/CN=system:node:$(hostname)/O=system:nodes"
openssl x509 -req -in /etc/kubernetes/pki/kubelet.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out /etc/kubernetes/pki/kubelet.crt -days 365
3.8.2 配置kubelet¶
创建kubelet服务: vim /etc/systemd/system/kubelet.service
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/
[Service]
ExecStart=/usr/local/bin/kubelet --kubeconfig=/etc/kubernetes/kubelet.conf
Restart=always
StartLimitInterval=0
RestartSec=10
[Install]
WantedBy=multi-user.target
编写配置文件:vim /etc/kubernetes/kubelet.conf
apiVersion: v1
kind: Config
kubeconfig: /var/lib/kubelet/config.yaml
clusters:
- cluster:
certificate-authority: /etc/kubernetes/pki/ca.crt
server: https://127.0.0.1:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubelet
name: kubelet
current-context: kubelet
users:
- name: kubelet
user:
client-certificate: /etc/kubernetes/pki/kubelet.crt
client-key: /etc/kubernetes/pki/kubelet.key
vim /var/lib/kubelet/config.yaml address: "0.0.0.0"
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 0s
enabled: true
x509:
clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:
mode: Webhook
nodeRegistration:
criSocket: "unix:///var/run/containerd/containerd.sock"
imagePullPolicy: IfNotPresent
kubeletExtraArgs:
pod-infra-container-image: "portainer/pause-linux-riscv64:latest"
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: cgroupfs
cgroupRoot: /
clusterDNS:
- 10.230.214.24
clusterDomain: cluster.kubernetes
resolvConf: /etc/resolv.conf
3.2.2 启动kubelet¶
4 启动集群¶
4.1 创建集群¶
openssl genrsa -out /etc/kubernetes/pki/admin.key 2048
openssl req -new -key /etc/kubernetes/pki/admin.key -out /etc/kubernetes/pki/admin.csr -subj "/CN=admin/O=system:masters"
openssl x509 -req -in /etc/kubernetes/pki/admin.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out /etc/kubernetes/pki/admin.crt -days 365
kubectl config set-cluster kubernetes --server=https://127.0.0.1:6443 --certificate-authority=/etc/kubernetes/pki//ca.crt
kubectl config set-credentials admin --client-certificate=/etc/kubernetes/pki/admin.crt --client-key=/etc/kubernetes/pki/admin.key
kubectl config set-context kubernetes --cluster=kubernetes --user=admin
kubectl config use-context kubernetes
[root@openeuler-riscv64 kubernetes]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
openeuler-riscv64 Ready control-plane 3d23h v1.34.1-62+79a8f71ff82983
4.2 启动网络插件pod¶
[root@openeuler-riscv64 kubernetes]# kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
namespace/kube-flannel created
serviceaccount/flannel created
clusterrole.rbac.authorization.k8s.io/flannel unchanged
clusterrolebinding.rbac.authorization.k8s.io/flannel unchanged
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
[root@openeuler-riscv64 kubernetes]# kubectl get pods -n kube-flannel
NAME READY STATUS RESTARTS AGE
kube-flannel-ds-zqx5v 1/1 Running 0 3h50m
4.3 创建pod¶
以busybox镜像来创建容器为例: 编写配置文件 vim test_riscv64.yaml
apiVersion: v1
kind: Pod
metadata:
name: busybox-riscv64-fixed
spec:
containers:
- name: busybox
image: busybox:stable
command: ["/bin/sh"]
args: ["-c", "sleep 3600"]
dnsPolicy: Default
nodeSelector:
kubernetes.io/arch: riscv64
restartPolicy: Never
[root@openeuler-riscv64 kubernetes]# kubectl get pods
NAME READY STATUS RESTARTS AGE
busybox-riscv64-fixed 1/1 Running 0 50m
4.4 进入容器¶
进入容器:

5 kubernets-dashboard¶
5.1 编译安装¶
先安装kind:
获取dashboard代码,编译代码, dashbord网页主要用go和js,css编写:git clone https://github.com/kubernetes/dashboard.git
git checkout release/v7.9.0
cd modules/web && yarn
make build
编译前端部分报错 非法指令 错误:
[dashboard-web] Building localized frontend
make[2]: *** [Makefile:112: --ng-build] Illegal instruction (core dumped)
make[1]: *** [Makefile:14: web/] Error 2
make: *** [Makefile:28: build] Error 2
解决办法: 上图显示angular 不兼容node版本,angular原本用的是16.2.1。 进入到modules/web目录下,对angular进行升级:直接修改 modules/web 下面的 package.json,将angular/core和angular/cli的版本修改为^18.0.0。即安装 v18 以上的angular。 用下面的命令升级cli,升级不能跳代,需要一级一级升级……

但是!还是有错:

看来还有其他包有问题,在node_modules下面找:
发现一个nice-napi中,既有x86的预编译版本,又有源码编译的riscv版本:node_modules/nice-napi/prebuilds/linux-x64/node.napi.node: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
node_modules/nice-napi/build/Release/nice_napi.node: ELF 64-bit LSB shared object, UCB RISC-V, RVC, double-float ABI, version 1 (SYSV), dynamically linked, BuildID[sha1]=caad0df37f91c720475e62014b4119f1a5b11ab8, not stripped
find node_modules -type f -name "*.node" -exec file {} \; > /tmp/all_nodes.txt
grep -v "riscv" /tmp/all_nodes.txt | grep -v "RISC-V"
node_modules/uWebSockets.js/uws_darwin_arm64_115.node: Mach-O 64-bit arm64 dynamically linked shared library, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|WEAK_DEFINES|BINDS_TO_WEAK|NO_REEXPORTED_DYLIBS|HAS_TLV_DESCRIPTORS>

重新编译uWebsocket.js
编译完后目录下没有生成任何.node文件说明编译失败,这个包只提供二进制文件,不提供源码编译 克隆源码来编译:https://github.com/uNetworking/uWebSockets.js.git git submodule update --init --recursive
yum install nodejs-devel
mkdir -p targets/node-v20.18.2/include
ln -s /usr/include/node targets/node-v20.18.2/include
const char *ARM = "arm";
const char *ARM64 = "arm64";
const char *X64 = "x64";
const char *RISCV64 = "riscv64";
#ifdef __arm__
arch = ARM;
#endif
#ifdef __aarch64__
arch = ARM64;
#endif
#ifdef __riscv
arch = RISCV64;
#endif
[hyj@openeuler-riscv64 uWebSockets.js]$ ls dist/
uws.js uws_linux_riscv64_115.node
将 uws_linux_riscv64_115.node 拷贝 到 dashboard 的 modules/web/node_modules/uWebSockets.js 目录中去:
cp ./dist/uws_linux_riscv64_115.node ../dashboard/modules/web/node_modules/uWebSockets.js/
typescript 版本太低,无法匹配高版本的 go 和 node,需要将其升级到 5.4.0 。 其他报错:
/home/hyj/ecosystem/dashboard/modules/web/src/index.ts: Unknown version 142 of and_chr (While processing: "base$0$0")
./modules/auth/.dist/dashboard-auth
./modules/metrics-scraper/.dist/dashboard-metrics-scraper
./modules/api/.dist/dashboard-api
./modules/web/.dist/dashboard-web
5.2 启动服务¶
运行使用:启动web(前端)
KUBERNETES_SERVICE_HOST=10.230.214.24 KUBERNETES_SERVICE_PORT=6443 nohup ./dashboard-web --insecure-port 8001 --insecure-bind-address 0.0.0.0 --kubeconfig ~/.kube/config > web.log 2>&1 &
KUBERNETES_SERVICE_HOST=10.230.214.24 KUBERNETES_SERVICE_PORT=6443 nohup ./dashboard-api --insecure-bind-address 0.0.0.0 --insecure-port 8004 --kubeconfig ~/.kube/config > api.log 2>&1 &
KUBERNETES_SERVICE_HOST=10.230.214.24 KUBERNETES_SERVICE_PORT=6443 nohup ./dashboard-auth --port 8003 --kubeconfig /root/.kube/config -v2 > auth.log 2>&1 &
在dashboard中,这几个服务被视为一个服务,是无法指定其他服务的端口的,为了让他们连互相能访问到,需要起一个nginx进行代理。
nginx.conf 配置如下,里面的 token 是为了方便临时性放在这里的,需要提前在kubernetes中生成:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8002;
server_name 10.230.214.24;
proxy_set_header Host $host;
proxy_set_header Origin $host:$server_port;
proxy_set_header Referer $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Csrf-Token $http_x_csrf_token;
proxy_set_header Authorization "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkZncUVmR2NTc3FPa0lkbWVac0lYU3FBbFZ1TWhGVno3U0Q5TDN0VHRzM2MifQ.eyJhdWQiOlsiYXBpIl0sImV4cCI6MTc2MzYzNzMwMCwiaWF0IjoxNzYzNjMzNzAwLCJpc3MiOiJhcGkiLCJqdGkiOiJhMDc2Njc2My1mODk0LTQ2ODUtODdkZC1kZWFlZDBiOTE2ZGEiLCJrdWJlcm5ldGVzLmlvIjp7Im5hbWVzcGFjZSI6Imt1YmVybmV0ZXMtZGFzaGJvYXJkIiwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImFkbWluIiwidWlkIjoiM2UzYzJkOGEtYmJkYS00YmU2LWFjYzQtNThlMWEzMTEyYjM1In19LCJuYmYiOjE3NjM2MzM3MDAsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbiJ9.miWTZODUfsQZnA6ERLuz26-5t6UXPD4kf1YEcZHb3MPG1pVmj7f02sellDAJrHSMQ5sN9TD_hCrYP3JQI-oqpI-Z3MZ1jAcRkNLIN9X-txPweZA0yg0wKtAWPskDCkTMzr_iZNuBusjZFQKzd_BaWyxxXeH9CMuFd_Vi7q-n0L1pQNJjxPVqrsV1CEWE1el9h6rGklanUlXwsh5yXlBcWQfOVX92JEPQMo7d-o44N9PD72_QjfdCd4o7-WXpdnA31SiraywkwwcaefdvJjG_HFxetste4tLYIP1VZZNfJfCXu4MVnyCDJmHa-2ulsQv_kIDY1Bkl1DQ4CU9ZiJsV8A";
# 代理 /api/v1/login,me,csrftoken 请求到 8003 端口(auth 服务)
location /api/v1/me {
proxy_pass http://127.0.0.1:8003;
}
location /api/v1/csrftoken{
proxy_pass http://127.0.0.1:8003;
}
location /api/v1/login {
proxy_pass http://127.0.0.1:8003;
}
# 代理剩余 /api 请求到 8004 端口(api 服务)
location /api/ {
proxy_pass http://127.0.0.1:8004;
}
# 代理其他请求到 8001 端口(Web 服务)
location / {
proxy_pass http://127.0.0.1:8001;
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
proxy_pass http://127.0.0.1:8001;
expires 1y;
add_header Cache-Control "public, immutable";
}
}
}
}
5.3 登录使用 dashboard¶
生成一个 token 用于登录,注意 dashboard 默认使用 kubernetes-dashboard 这个命令空间,所以需要提前创建。
[root@openeuler-riscv64 hyj]# kubectl create serviceaccount admin -n kubernetes-dashboard
serviceaccount/hyj created
[root@openeuler-riscv64 hyj]# kubectl -n kubernetes-dashboard create token admin
eyJhbGciOiJSUzI1NiIsImtpZCI6IkZncUVmR2NTc3FPa0lkbWVac0lYU3FBbFZ1TWhGVno3U0Q5TDN0VHRzM2MifQ.eyJhdWQiOlsiYXBpIl0sImV4cCI6MTc2MzYzNzMwMCwiaWF0IjoxNzYzNjMzNzAwLCJpc3MiOiJhcGkiLCJqdGkiOiJhMDc2Njc2My1mODk0LTQ2ODUtODdkZC1kZWFlZDBiOTE2ZGEiLCJrdWJlcm5ldGVzLmlvIjp7Im5hbWVzcGFjZSI6Imt1YmVybmV0ZXMtZGFzaGJvYXJkIiwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImFkbWluIiwidWlkIjoiM2UzYzJkOGEtYmJkYS00YmU2LWFjYzQtNThlMWEzMTEyYjM1In19LCJuYmYiOjE3NjM2MzM3MDAsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbiJ9.miWTZODUfsQZnA6ERLuz26-5t6UXPD4kf1YEcZHb3MPG1pVmj7f02sellDAJrHSMQ5sN9TD_hCrYP3JQI-oqpI-Z3MZ1jAcRkNLIN9X-txPweZA0yg0wKtAWPskDCkTMzr_iZNuBusjZFQKzd_BaWyxxXeH9CMuFd_Vi7q-n0L1pQNJjxPVqrsV1CEWE1el9h6rGklanUlXwsh5yXlBcWQfOVX92JEPQMo7d-o44N9PD72_QjfdCd4o7-WXpdnA31SiraywkwwcaefdvJjG_HFxetste4tLYIP1VZZNfJfCXu4MVnyCDJmHa-2ulsQv_kIDY1Bkl1DQ4CU9ZiJsV8A

把生成的token输入,登录进去,可以看到kubernetes集群中自己创建的各种namespace,node信息,cluster信息等等。 namespace:

nodes:

pods: 可以看到正在运行的pods:
